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

Zip Archive: Can I rename or move a ZipArchiveEntry?

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

谢谢 马丁

除了重命名条目外,我不知道 "move" 是什么意思。即使在常规磁盘文件系统中,"move" 实际上只是文件名的完整路径已更改的重命名,而不仅仅是 "leaf node" 文件名。在 .zip 存档中,这更加明确;档案中的 "directory" 或 "folder" 仅由于其名称中包含该目录名称的条目而存在(当然,由目录分隔符分隔)。所以 "move" 与 "rename".

完全相同


至于你是否可以重命名,不......使用 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);