【问题标题】:Is there any difference between ZIP files? [closed]ZIP 文件之间有什么区别吗? [关闭]
【发布时间】:2019-04-09 01:25:51
【问题描述】:

我使用 Windows compress 创建了一个 ZIP 文件,然后使用 WinRAR 创建了另一个 ZIP 文件。在我的输出中,我有两组不同的输出!

文件夹列表不会出现在 Windows 生成的 ZIP 文件中,但我有一个文件夹列表以及 WinRAR 创建的 ZIP 文件。

  • 哪一个是正确的存档?
  • 您遇到过这个问题吗?
  • 我该如何处理这种情况?
  • 还有其他型号吗?

Windows 压缩 ZIP 文件的输出:

DirectoryName:data FileName:data.bin
DirectoryName: FileName:manifest.txt
DirectoryName:pdfs FileName:some.pdf

WinRAR ZIP 文件的输出:

DirectoryName: FileName:manifest.txt
DirectoryName:data FileName:
DirectoryName:data FileName:data.bin
DirectoryName:pdfs FileName:
DirectoryName:pdfs FileName:some.pdf

我正在使用此代码生成上述输出:

using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
    foreach (ZipArchiveEntry entry in archive.Entries)
    {
        TreeNodeDetails tnd = new TreeNodeDetails(entry.FullName, seq_folder_id++, NODETYPE.ZIPFILE, NODE_Format.DIRECTORY);
        Console.WriteLine("DirectoryName:" + tnd.directoryName + " FileName:" + tnd.fileName);
        InitiateTree(rootTreeNode, tnd);
    }
}

【问题讨论】:

  • 使用 WinRAR 创建的 ZIP 文件是使用 "%ProgramFiles%\WinRAR\WinRAR.exe" a -ep1 -r Example.zip C:\Temp\ExampleFolder\* 隐式创建的,这会导致将目录条目添加到独立于包含至少一个文件或为空的目录的 ZIP 存档中。这就像运行dir C:\Temp\ExampleFolder\* /B /S。通过另外使用开关-ed 排除空目录WinRAR 将创建一个仅包含文件条目及其数据的ZIP 文件,就像在命令提示符窗口dir C:\Temp\ExampleFolder\* /A-D /B /S 中运行一样。
  • @Mofi:感谢您的宝贵意见。

标签: c# zipfile winrar winzip


【解决方案1】:

是的,有几种压缩类型,最常见的是 Zip、GZip 和 Rar。您想要哪种类型取决于您将使用它的目的,以及您将使用什么程序进行压缩/解压缩,并且由于您似乎正在编写自己的文件,因此它也应该适合您解压缩。三种主要类型之间的大小差异不大,尽管这取决于压缩档案的大小。所以基本上由你决定!

如果您担心出了什么问题,您可以解压缩并比较内容,然后您可以根据压缩后的大小决定保留哪一个。 zip 一直比较常见,但现在大多数 zip 程序也处理 rar。

【讨论】:

  • 对于 linux 上的人(但不仅如此),将 .tar.gz/.tgz 或 zlib 添加到列表中似乎与我有关 ^^
  • 绝对是的!他的两个压缩程序都是基于 Windows 的,所以我没有想到,我想 mac 也有一两种压缩类型,但我不知道
  • 是的,无论如何,对于 C#,目标可能是 windows,但由于它不是强制性的,我想展示选择的范围有多大。我记得在为相机编写驱动程序时遇到很多问题,其中一个文件是用 zlib 压缩的,但没有人告诉我>
  • @PrinceOfRavens:我正在使用 ZipArchive,在加载 zip 文件时是否需要指定任何特别的内容?
  • 首先,您确定提供的文件是正确的吗?您是否尝试过使用自己创建的 zip 文件?上次我遇到 zip 的问题是在 C++ 中,但我很确定 ZipArchive 类不支持任何格式。您对您的用户如何创建它有任何线索吗?你能相信文件扩展名吗?一些上下文可能会有所帮助。
【解决方案2】:

这两个示例在功能上没有区别。例如:

DirectoryName:data FileName:data.bin

如果文件夹'data' 不存在,则会创建它,然后将提取“data.bin”文件并将其添加到该文件夹​​中。

【讨论】:

  • 这取决于我在 InitiateTree() 函数中写的内容;)
猜你喜欢
  • 2015-02-22
  • 2010-09-18
  • 2014-10-02
  • 2013-12-11
  • 2014-02-13
  • 1970-01-01
  • 2014-08-16
  • 1970-01-01
  • 2021-06-29
相关资源
最近更新 更多