ファイルがアーカイブであるかどうかを判断するために、SevenZipSharpを使用したいと思います。エクスプローラーで.zipの名前を.bmpに変更しても、7zipはそれをアーカイブとして認識するため、それが可能であることを私は知っています。
--編集:言い換えると、ファイル(拡張子に関係なく)にサポートされているアーカイブ(zip、tar、rar、isoなど)が含まれているかどうかを7zipに通知させたいのです。
ありがとう、フィデル
ファイルがアーカイブであるかどうかを判断するために、SevenZipSharpを使用したいと思います。エクスプローラーで.zipの名前を.bmpに変更しても、7zipはそれをアーカイブとして認識するため、それが可能であることを私は知っています。
--編集:言い換えると、ファイル(拡張子に関係なく)にサポートされているアーカイブ(zip、tar、rar、isoなど)が含まれているかどうかを7zipに通知させたいのです。
ありがとう、フィデル
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;
}
ファイルがアーカイブかどうかを知るためだけに Sevenzip を使用する必要はありません。さまざまなファイルのマジック バイトをチェックするだけで十分です。
例えば:
Zip の先頭は 2 バイト 50 4B (PK) です。
RAR の最初の 3 バイトは 52 61 72 (Rar!)
ファイルがアーカイブかどうかを判断する方法は、実際に SevenZipSharp ライブラリにフィードしてみて、成功するか失敗するかを確認することです。ただし、これは、拡張子.bmpでマークされた.zipファイルがたくさんある例のように、非常に遅いプロセスになります。
SharpCompressもこれを簡単に行います。
bool x = SevenZipArchive.IsSevenZipFile(File.OpenRead(path));
私はそのライブラリを使用したことがなく、ドキュメントがないという事実は役に立ちませんが、通常はアーカイブを開こうとし、エラーが発生した場合、ファイルがアーカイブではないことを意味する可能性があります (おそらく特定のエラーがあります)それ)。
私は SevenZipSharp に詳しくありませんが、ZIP はよく文書化されたファイル形式です。たとえば、次のようになります。ZIP ファイル形式
ファイルとエントリの先頭にあるマジック ナンバーに注意してください。zip ファイルを検出するための特別な API/ライブラリは必要ありません。通常のファイルとして読み取り、形式に準拠しているかどうかを確認するだけです。ファイル全体を解析したくない場合は、怠惰になって、ファイルの署名が探しているもの (またはその 1 つ) であることを確認してください:ファイル署名のリスト