C# ZIP文件之间有什么区别吗?

C# ZIP文件之间有什么区别吗?,c#,zipfile,winrar,winzip,C#,Zipfile,Winrar,Winzip,我使用Windows compress创建了一个ZIP文件,然后使用WinRAR创建了另一个ZIP文件。在我的输出中,我有两组不同的输出 文件夹列表不会出现在Windows生成的ZIP文件中,但我有一个文件夹列表以及WinRAR创建的ZIP文件 哪一个是正确的存档 你曾经面对过这个问题吗 我如何处理这种情况 还有其他型号的吗 Windows压缩ZIP文件的输出: DirectoryName:data FileName:data.bin DirectoryName: FileName:mani

我使用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
DirectoryName: FileName:manifest.txt
DirectoryName:data FileName:
DirectoryName:data FileName:data.bin
DirectoryName:pdfs FileName:
DirectoryName:pdfs FileName:some.pdf
WinRAR ZIP文件的输出:

DirectoryName:data FileName:data.bin
DirectoryName: FileName:manifest.txt
DirectoryName:pdfs FileName:some.pdf
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);
    }
}

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


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

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


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

这两个示例在功能上没有什么不同。例如:

DirectoryName:data FileName:data.bin

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

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

DirectoryName:data FileName:data.bin

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

对于linux上的用户(但不仅限于此),将.tar.gz/.tgz或zlib添加到列表中似乎与我相关^^绝对是!他的两个压缩程序都是基于windows的,所以我没有想到,我想mac也有一两种压缩类型,但我不知道。是的,不管怎样,C#的目标可能是windows,但因为它不是强制性的,我想展示一下选择的范围有多广。我记得在为摄像头编写驱动程序时遇到了很多问题,其中一个文件是用zlib压缩的,但没有人告诉我>@PrinceOfRavens:我在使用ZipArchive,在加载zip文件时是否需要指定任何特殊的库?首先,你确定提供的文件是正确的吗?您是否尝试过使用自己创建的zip文件?上次我用ZIP解决问题是在C++中,但是我很确定ZiPARCHIVE类不支持任何格式。关于用户是如何创建它的,你有什么线索吗?你能信任文件扩展名吗?稍微了解一下上下文可能会有所帮助。对于linux用户(但不仅仅是linux用户),将.tar.gz/.tgz或zlib添加到列表中似乎与我相关^^是的,绝对如此!他的两个压缩程序都是基于windows的,所以我没有想到,我想mac也有一两种压缩类型,但我不知道。是的,不管怎样,C#的目标可能是windows,但因为它不是强制性的,我想展示一下选择的范围有多广。我记得在为摄像头编写驱动程序时遇到了很多问题,其中一个文件是用zlib压缩的,但没有人告诉我>@PrinceOfRavens:我在使用ZipArchive,在加载zip文件时是否需要指定任何特殊的库?首先,你确定提供的文件是正确的吗?您是否尝试过使用自己创建的zip文件?上次我用ZIP解决问题是在C++中,但是我很确定ZiPARCHIVE类不支持任何格式。关于用户是如何创建它的,你有什么线索吗?你能信任文件扩展名吗?稍微了解一下上下文可能会有所帮助。这取决于我在InitiateTree()函数中编写的内容;)这取决于我在InitiateTree()函数中写的内容;)使用WinRAR创建的ZIP文件是使用
%ProgramFiles%\WinRAR\WinRAR.exe“a-ep1-r Example.ZIP C:\Temp\ExampleFolder\*
隐式创建的,这会导致将目录项添加到ZIP存档中,该存档独立于至少包含一个文件的目录或为空的目录。这就像运行
dirc:\Temp\ExampleFolder\*/B/s
。通过另外使用开关
-ed
排除空目录,WinRAR将创建一个只包含文件项及其数据的ZIP文件,就像在命令提示窗口
dir C:\Temp\ExampleFolder\*/a-D/B/S
@Mofi:感谢您的宝贵输入。使用WinRAR创建的ZIP文件是隐式创建的
%ProgramFiles%\WinRAR\WinRAR.exe“a-ep1-r Example.zip C:\Temp\ExampleFolder\*
,这会导致将目录项添加到zip存档中,该存档独立于至少包含一个文件或为空的目录。这就像运行
dirc:\Temp\ExampleFolder\*/B/s
。通过另外使用开关
-ed
排除空目录,WinRAR将创建一个只包含文件项及其数据的ZIP文件,就像在命令提示窗口
目录C:\Temp\ExampleFolder\*/a-D/B/S
@Mofi:感谢您的宝贵输入。