gpt4 book ai didi

c# - 压缩包 : Can I rename or move a ZipArchiveEntry?

转载 作者:太空狗 更新时间:2023-10-29 18:31:23 25 4
gpt4 key购买 nike

.NET ZipArchive 是否允许重命名或移动条目?目前无法更改 ZipArchiveEntry 创建后的名称。看来我必须将原始 ZipArchiveEntry 的流复制到名称更改后的新 ZipArchiveEntry。

谢谢马丁

最佳答案

除了重命名条目外,我不知道“移动”是什么意思。即使在常规磁盘文件系统中,“移动”实际上只是重命名文件名的完整路径,而不仅仅是“叶节点”文件名。在 .zip 存档中,这更加明确;存档中的“目录”或“文件夹”仅通过名称中包含该目录名称的条目而存在(当然,由目录分隔符分隔)。所以“移动”与“重命名”完全相同。


至于你是否可以重命名,不......用ZipArchive ,您必须创建一个新条目,它是原始条目的副本,但使用新名称,然后删除原始条目。

执行此操作的代码如下所示:

static void RenameEntry(this ZipArchive archive, string oldName, string newName)
{
ZipArchiveEntry oldEntry = archive.GetEntry(oldName),
newEntry = archive.CreateEntry(newName);

using (Stream oldStream = oldEntry.Open())
using (Stream newStream = newEntry.Open())
{
oldStream.CopyTo(newStream);
}

oldEntry.Delete();
}

作为扩展方法实现,如上,可以这样调用:

ZipArchive archive = ...; open archive in "update" mode
string oldName = ...,
newName = ...; // names initialized as appropriate

archive.RenameEntry(oldName, newName);

关于c# - 压缩包 : Can I rename or move a ZipArchiveEntry?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com