Zip存档:我可以重命名或移动ZipArchiveEntry吗?

mse*_*edi 8 .net c# zip

.NET ZipArchive是否允许重命名或移动条目?目前,一旦创建ZipArchiveEntry,就无法更改它的名称.似乎我必须将原始ZipArchiveEntry的流复制到具有更改名称的新ZipArchiveEntry.

谢谢马丁

Pet*_*iho 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();
}
Run Code Online (Sandbox Code Playgroud)

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

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

archive.RenameEntry(oldName, newName);
Run Code Online (Sandbox Code Playgroud)