如何在带有sharpZipLibrary的ZipEntry中阅读更多信息ZipEntry?

时间:2012-11-28 22:39:40

标签: c# .net zip sharpziplib

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

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

e.g:

Collection.zip       FILE1.TXT       FILE2.TXT       报告/            REPORT1.TXT            REPORT2.TXT       first-backup.zip       second-backup.zip

使用尖锐的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("--------------------------------------------");
    }

在我遇到更多麻烦之前,我应该考虑哪些想法?

1 个答案:

答案 0 :(得分: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: