ISOファイルが有効かどうか、つまり有効なIso形式またはその他のチェックが可能かどうかをチェックするC#の方法はありますか。シナリオは、テキスト ファイル (またはその他の形式のファイル) の名前が ISO に変更され、さらに処理するために指定された場合に似ています。この ISO ファイルが有効な ISO ファイルであるかどうかを確認したいのですが。ファイルまたはファイルヘッダーのプロパティやその他のものをプログラムでチェックする方法はありますか
事前に返信いただきありがとうございます
ISOファイルが有効かどうか、つまり有効なIso形式またはその他のチェックが可能かどうかをチェックするC#の方法はありますか。シナリオは、テキスト ファイル (またはその他の形式のファイル) の名前が ISO に変更され、さらに処理するために指定された場合に似ています。この ISO ファイルが有効な ISO ファイルであるかどうかを確認したいのですが。ファイルまたはファイルヘッダーのプロパティやその他のものをプログラムでチェックする方法はありますか
事前に返信いただきありがとうございます
ウィキの神々を引用するには:
ISO イメージ ファイルの標準定義はありません。ISO ディスク イメージは圧縮されておらず、特定のコンテナー形式を使用していません。これらは、バイナリ ファイル内に格納された、光ディスク上のデータのセクタ単位のコピーです。ISO イメージには、光メディア ファイル システム (通常は ISO 9660 とその拡張子または UDF) のバイナリ イメージが含まれていることが期待されます。これには、バイナリ形式のファイル内のデータが含まれ、ディスクに保存されたとおりに正確にコピーされます。ISO イメージ内のデータは、作成元の光ディスクで使用されたファイル システムに従って構造化されます。
基本的に、ファイルが ISO ファイルであるかどうかを検出し、ファイルが有効かどうか (不完全、破損など) をチェックする必要はありません。
それを行う簡単な方法はありません。これを行うことができる C# 関数 (私が知っている) は確かにありません。
これにアプローチする最善の方法は、ISO に格納されているブロックあたりのバイト数を推測することです。この情報を実際に保存する CUE ファイルが関連付けられていない限り、推測するか、考えられるすべての状況を 1 つずつ試してみてください。PS。ISO に同名の .CUE ファイルが付随している場合、それが ISO ファイルであることは 99.99% 確実です。
サイズは、ブロックあたり 2048 (ユーザー データ) または 2352 (生またはオーディオ) バイトになります。他のサイズも可能です!!!! 最も一般的なものを 2 つ挙げました。ブロックあたり 2352 バイトの場合、ユーザー データはこのブロックのオフセットから始まります。モードに応じて、通常は 16 または 24 です。
次に、CD/DVD ファイル システムの検出を試みます。イメージがセクター 0 から始まると仮定します (ただし、安全のために、たとえば -150 から 16 を想定したスキャンを実装できます)。
そのためには、ISO9660 と UDF の詳細を調べる必要があります。セクター16、256などは興味深いセクターです!!
要するに、これは簡単な作業ではなく、光ディスクのレイアウトと光ディスクのファイル システム (ISO9660、UDF、場合によっては HFS、さらには BD の FAT) に慣れる必要があります。
これを掘り下げている場合は、IsoBuster ( www.isobuster.com ) を取得して、ブロックごとのサイズ、そこにあるファイル システム、さまざまなキー ブロックなどを調べることを強くお勧めします。
コマンドを実行md5sum
して、イメージの整合性を確認できます
たとえば、ISO のリストは次のとおりです: http://mirrors.usc.edu/pub/linux/distributions/centos/5.4/isos/x86_64/
あなたは実行することができます:
md5sum CentOS-5.4-x86_64-LiveCD.iso
1805b320aba665db3e8b1fe5bd5a14cc
出力は、ここから見つけることができると同じであると想定されています。
http://mirrors.usc.edu/pub/linux/distributions/centos/5.4/isos/x86_64/md5sum.txt