【问题标题】:Renaming a .Zip entry using only C# / .NET?仅使用 C#/.NET 重命名 .Zip 条目?
【发布时间】:2020-01-10 03:23:19
【问题描述】:

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

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

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

非常感谢您的帮助!

【问题讨论】:

    标签: c# .net zip


    【解决方案1】:

    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();
            }
        }
    }
    

    【讨论】:

    • 这正是我所说的“你也可以在 zip 中使用新名称创建一个新条目,通过流复制文件,然后删除原始条目”的意思 =(。
    • @Damieh 你不能在不重写洞文件伙伴的情况下向文件添加新条目。仅当新名称与旧名称具有相同长度时才有可能。即使这样,您也可能需要自己拆开 zip 文件。
    • 我不想添加新条目。改名就行了所以为了重命名文件,我必须复制它的全部内容?如果我要重命名的文件不是 900MB,那将不是问题。哦,非常感谢。
    • @Damieh 正如我之前所说,当新名称与旧名称完全相同时,您可以“轻松”更改名称。除此之外的所有内容都需要您更详细地查看 zip 文件的规格。看起来 zip 文件中的条目前面有一个 4 字节长度指示符(小端序)。
    • 您从哪里获得此信息?我想要一个链接或其他东西!
    猜你喜欢
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多