2

ファイルがアーカイブであるかどうかを判断するために、SevenZipSharpを使用したいと思います。エクスプローラーで.zipの名前を.bmpに変更しても、7zipはそれをアーカイブとして認識するため、それが可能であることを私は知っています。

--編集:言い換えると、ファイル(拡張子に関係なく)にサポートされているアーカイブ(zip、tar、rar、isoなど)が含まれているかどうかを7zipに通知させたいのです。

ありがとう、フィデル

4

7 に答える 7

5
static bool IsArchive(string filename)
{
    bool result = false;
    try
    {
        new ArchiveFile(File.OpenRead(filename));
        result = true;
    }
    catch
    {
        //log if you're going to do something about it
    }
    return result;
}
于 2011-05-12T13:37:17.193 に答える
2

ファイルがアーカイブかどうかを知るためだけに Sevenzip を使用する必要はありません。さまざまなファイルのマジック バイトをチェックするだけで十分です。

例えば:

Zip の先頭は 2 バイト 50 4B (PK) です。

RAR の最初の 3 バイトは 52 61 72 (Rar!)

于 2011-05-12T13:27:09.807 に答える
2

ファイルがアーカイブかどうかを判断する方法は、実際に SevenZipSharp ライブラリにフィードしてみて、成功するか失敗するかを確認することです。ただし、これは、拡張子.bmpでマークされた.zipファイルがたくさんある例のように、非常に遅いプロセスになります。

于 2011-05-12T13:25:29.630 に答える
2

SharpCompressもこれを簡単に行います。

bool x = SevenZipArchive.IsSevenZipFile(File.OpenRead(path));
于 2011-09-27T08:35:47.200 に答える
0

私はそのライブラリを使用したことがなく、ドキュメントがないという事実は役に立ちませんが、通常はアーカイブを開こうとし、エラーが発生した場合、ファイルがアーカイブではないことを意味する可能性があります (おそらく特定のエラーがあります)それ)。

于 2011-05-12T13:27:44.830 に答える
0

私は SevenZipSharp に詳しくありませんが、ZIP はよく文書化されたファイル形式です。たとえば、次のようになります。ZIP ファイル形式

ファイルとエントリの先頭にあるマジック ナンバーに注意してください。zip ファイルを検出するための特別な API/ライブラリは必要ありません。通常のファイルとして読み取り、形式に準拠しているかどうかを確認するだけです。ファイル全体を解析したくない場合は、怠惰になって、ファイルの署名が探しているもの (またはその 1 つ) であることを確認してください:ファイル署名のリスト

于 2011-05-12T13:33:15.680 に答える