2

ヘッダーを読み取って圧縮アーカイブ内の各ファイルの CRC 情報を取得する機能をサポートする 7zip (7z) 用の C# ベースの API はありますか? 私が見たものはすべて、ファイルを解凍する必要があります。圧縮フォルダー内のファイルの CRC を別のリストと比較するアプリケーションを作成しています。

現在、zip ファイルに DotNetZip を使用していますが、うまく機能します。残念ながら、.7z はサポートされていません。

編集: ZipFile.Read() の呼び出し時に例外が生成されました

{Ionic.Zip.ZipException: Cannot read that as a ZipFile ---> Ionic.Zip.BadReadException:   Bad signature (0xAFBC7A37) at position  0x00000000
   at Ionic.Zip.ZipEntry.ReadHeader(ZipEntry ze, Encoding defaultEncoding)
   at Ionic.Zip.ZipEntry.ReadEntry(ZipContainer zc, Boolean first)
   at Ionic.Zip.ZipFile.ReadIntoInstance_Orig(ZipFile zf)
   at Ionic.Zip.ZipFile.ReadIntoInstance(ZipFile zf)
   --- End of inner exception stack trace ---
   at Ionic.Zip.ZipFile.ReadIntoInstance(ZipFile zf)
   at Ionic.Zip.ZipFile.Read(String fileName, TextWriter statusMessageWriter, Encoding encoding, EventHandler`1 readProgress)
   at Ionic.Zip.ZipFile.Read(String fileName)

...

4

1 に答える 1

1

これは重複した投稿のように聞こえます..ここでは、このStackOverFlow Link Reading 7z filesの回答の一部を見てください

DotNetZip を使用している場合は、以下の例を試してください。

using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
  foreach (ZipEntry ze 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}",
                             ze.FileName,
                             ze.LastModified.ToString("yyyy-MM-dd HH:mm:ss"),
                             ze.UncompressedSize,
                             ze.CompressionRatio,
                             ze.CompressedSize,
                             (ze.UsesEncryption) ? "Y" : "N");

  }
}
于 2012-07-23T18:14:06.230 に答える