c# - 压缩包 : Can I rename or move a ZipArchiveEntry?

标签 c# .net zip

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

谢谢 马丁

最佳答案

除了重命名条目外,我不知道“移动”是什么意思。即使在常规磁盘文件系统中,“移动”实际上只是重命名文件名的完整路径,而不仅仅是“叶节点”文件名。在 .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();
}

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

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

archive.RenameEntry(oldName, newName);

关于c# - 压缩包 : Can I rename or move a ZipArchiveEntry?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562092/

相关文章:

c# - 实例化并初始化多维数组 C#

c# - .net 与 Outlook 配合使用

list - 在 Elixir 中有效压缩不等长列表

java - 线程池中的代码运行速度比非线程慢得多

python - 如何提取多个 .zip 文件?

C# ListView - 检测用户何时取消选择项目或选择新项目

c# - “ExpandoObject”不包含 'PropertyChanged' 的定义

.net - 更新 Entity Framework 中的数据库架构

c# - 如何检查一个数组是否包含另一个数组的任何项目

c# - 无法找到请求的 .Net Framework 数据提供程序。 (SQL客户端)