.NET ZipArchive是否允许重命名或移动条目?目前,一旦创建了ZipArchiveEntry,就无法更改它的名称。似乎我必须将原始ZipArchiveEntry的流复制到具有更改名称的新ZipArchiveEntry。
由于 马丁
答案 0 :(得分:8)
我不知道“移动”是什么意思,除了重命名一个条目。即使在常规磁盘文件系统中,“移动”实际上只是一个重命名,其中文件名的完整路径已更改,而不仅仅是“叶节点”文件名。在.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);