仅使用 C#/.NET 重命名 .Zip 条目?

Renaming a .Zip entry using only C# / .NET?

所以我现在要做的是打开一个 .Zip 文件并重命名其中的一个文件 (.NET 4.6.1)。我不认为我被允许使用第三方库,因为这是一个非常简单的操作(或者我认为,因为我找不到任何 MSDN 函数来重命名条目)。

我找到了几种方法,但它们都很讨厌。您可以将文件提取到磁盘并使用不同的名称再次添加,或者您也可以在 zip 中使用新名称创建一个新条目,通过流复制文件,然后删除原始条目。

有什么有效的方法吗?在这一点上我不介意任何想法。我知道 DotNetZip 只有一行,但我不能使用第三方库。

非常感谢您的帮助!

使用 System.IO.Compression 中的 ZipArchive。这是一个向指定 zip 文件中的每个条目添加 .dat 扩展名的示例:

private static void RenameZipEntries(string file)
{
    using (var archive = new ZipArchive(File.Open(file, FileMode.Open, FileAccess.ReadWrite), ZipArchiveMode.Update))
    {
        var entries = archive.Entries.ToArray();
        foreach (var entry in entries)
        {
            var newEntry = archive.CreateEntry(entry.Name + ".dat");
            using (var a = entry.Open())
            using (var b = newEntry.Open())
                a.CopyTo(b);
            entry.Delete();
        }
    }
}