そのzipファイルかどうかを確認するためにファイルをテストする良い方法は何ですか?
-
19-09-2019 - |
質問
私は新しいファイルフォーマット仕様として探していますし、仕様はファイルがXMLベースまたはXMLファイルや他のファイルを含むzipファイルのいずれかになりますと言います。
ファイルの拡張子は、どちらの場合も同じです。私はそれが解凍またはちょうど読ん必要があるかどうかを決定するためにファイルをテストすることができどのような方法?
解決
zipファイル形式はPKWAREで定義されています。あなたはここにを自分のファイル指定を見つけることができます。
トップの近くには、ヘッダーの仕様があります:
A。ローカルファイルのヘッダーます:
local file header signature 4 bytes (0x04034b50) version needed to extract 2 bytes general purpose bit flag 2 bytes compression method 2 bytes last mod file time 2 bytes last mod file date 2 bytes crc-32 4 bytes compressed size 4 bytes uncompressed size 4 bytes file name length 2 bytes extra field length 2 bytes file name (variable size) extra field (variable size)
このからは、ヘッダの最初の4つのバイトが進値0x04034b50でなければならないファイルの署名であることを見ることができます。ファイル内のバイト順序は、他の方法でラウンドです - あなたがファイルを表示するためにバイナリエディタを使用する場合は、として50 4B 03 04が表示されますので、PKWAREは、「すべての値は、特に指定がない限り、リトルエンディアンバイト順に格納されている」ことを指定します最初の4バイト
あなたは、あなたのファイルはzipファイルであるかどうかを確認するためにこれを使用することができます。メモ帳でファイルを開くと、あなたはわかりますその最初の2バイト(50及び4b)ASCII文字のPKです。
他のヒント
あなたは、ファイルのこのマジックナンバーを見ることができます。 ZIPアーカイブのものが ZIP形式のWikipediaのページに記載されています:。PK\003\004 or PK\005\006
マジックナンバーのファイルの最初の数バイトをチェックしてください。 Zipファイルには、PK(50 4B)で始まります。 XMLファイルは、これらの文字で始まり、まだ有効ではないように、ファイルの種類に関してはかなり確認することができます。
あなたはそれがテキストファイル(XML)だかどうかを確認するためにファイルを使用したりすることができます実行可能ファイル(ZIP)。 例を参照するには、下にスクロールします。
良い解決策はしかし、ちょうど大声で考えていない...方法について:
try
{
LoadXmlFile(theFile);//Exception if not an xml file
}
catch(Exception ex)
{
LoadZipFile(theFile)
}
あなたはそれが有効なXMLヘッダーが含まれているかどうかを確認するために、ファイルをチェックすることができます。そうでない場合は、それを解凍してみてください。
明確にするために、それは50 4B 03 04で始まります。
http://www.pkware.com/documents/casestudies/APPNOTEを参照してください。 TXTする(サイモンPスティーブンスから)
あなたはそれを解凍してみてください可能性があります。
これはzipファイルで何を使用しているが、ジップライブラリはファイル天気をテストする機能を持っているか、いない可能性がありますに依存します is_zip、test_file_zipまたは何のようなもの...
または上記のマジックナンバーを使用することによって、あなたがしている独自の関数を作成します。