ZipArchive:我可以重命名或移动ZipArchiveEntry吗?
本文关键字:ZipArchiveEntry 移动 我可以 重命名 ZipArchive | 更新日期: 2023-09-27 17:51:15
.NET ZipArchive允许重命名或移动条目吗?目前,一旦创建了ZipArchiveEntry,就不可能更改它的名称。似乎我必须将原始ZipArchiveEntry的流复制到具有更改名称的新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);