0

zipファイル内で利用可能なすべての情報(ファイル名、長さ、作成日、変更日など)をリストする必要があります。分析する必要のあるいくつかのzipファイルには、フォルダーとzipファイル、およびその他のファイルタイプが含まれています。

zipファイル内のこれらのフォルダーとコンテンツ、およびzipファイル内のzipエントリを、すべてを解凍せずに読み取る方法を考えていました(可能な場合でも)

例えば:

Collection.zip file1.txt file2.txt reports / 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("--------------------------------------------");
    }

トラブルに巻き込まれる前に考慮すべきアイデアはありますか?

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 に答える