0

我必须列出 zip 文件中的所有可用信息(文件名、长度、创建日期、修改日期等)。我必须分析的一些 zip 文件包含其中的文件夹和 zip 文件以及其他文件类型。

我想知道如何读取 zip 文件中的这些文件夹和内容以及 zip 文件中的 zip 条目,而无需解压缩整个内容(如果可能的话)

例如:

Collection.zip file1.txt file2.txt reports/report1.txt report2.txt first-backup.zip second-backup.zip

使用Sharp zip库,我可以通过以下方式读取第一层文件:

foreach (Zip_Library.Zip.ZipEntry entry in new Zip_Library.Zip.ZipFile(fi.FullName))
{
     printObjectProps(entry);
}

printObjectProps 看起来有点像这样:

    private static void printObjectProps(Object obj)
    {
        Console.WriteLine("--------------------------------------------");
        Console.WriteLine("ObjectType:" + obj.GetType().ToString());
        Console.WriteLine("--------------------------------------------");
        foreach (PropertyInfo propInfo in obj.GetType().GetProperties())
        {
            Console.WriteLine("PropertyName:" + propInfo.Name);
            Console.WriteLine("PropertyType:" + propInfo.PropertyType);
            Console.WriteLine("PropertyValue:" + propInfo.GetValue(obj, null));
            Console.WriteLine();
        }
        Console.WriteLine("--------------------------------------------");
    }

在我陷入更多麻烦之前我应该​​考虑的任何想法?

4

1 回答 1

1

DotNetZip 将为您提供您想要的:

http://dotnetzip.codeplex.com/

它既简单又易于使用。列出一个 zipfile 目录:

using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  foreach (ZipEntry e in zip)
  {
    if (header)
    {
      System.Console.WriteLine("Zipfile: {0}", zip.Name);
      if ((zip.Comment != null) && (zip.Comment != "")) 
        System.Console.WriteLine("Comment: {0}", zip.Comment);
      System.Console.WriteLine("\n{1,-22} {2,8}  {3,5}   {4,8}  {5,3} {0}", "Filename", "Modified", "Size", "Ratio", "Packed", "pw?");
      System.Console.WriteLine(new System.String('-', 72));
      header = false;
    }
      System.Console.WriteLine("{1,-22} {2,8} {3,5:F0}%   {4,8}  {5,3} {0}", e.FileName, e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), e.UncompressedSize, e.CompressionRatio, e.CompressedSize, (e.UsesEncryption) ? "Y" : "N");  
  }
}

没有任何东西是未压缩的。它只是寻找文件的末尾,然后向后寻找目录/清单,然后读取它。

如果您发现一个条目本身就是一个 zip 文件,并且您想探索它,很容易将其提取为一个临时文件并递归探索它,但如果我没记错的话,您可以


编辑注释: DotNetZip 曾经住在 Codeplex。Codeplex 已关闭。旧档案仍然 [可在 Codeplex 获得][1]。看起来代码已经迁移到 Github:


于 2012-11-29T00:21:38.777 回答