ZipArchive:我可以重命名或移动ZipArchiveEntry吗?

本文关键字:ZipArchiveEntry 移动 我可以 重命名 ZipArchive | 更新日期: 2023-09-27 17:51:15

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

谢谢马丁

ZipArchive:我可以重命名或移动ZipArchiveEntry吗?

除了重命名条目外,我不知道"move"是什么意思。即使在常规的磁盘文件系统中,"move"实际上也只是重命名,其中文件名的完整路径已经更改,而不仅仅是"叶节点"文件名。在.zip归档文件中,这一点甚至更加明确;存档中的"目录"或"文件夹"仅在条目的名称中具有该目录名称时才存在(当然,由目录分隔符分隔)。所以"move"answers"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);