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);
.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);