13

私は新しいファイル形式の仕様を探しています。仕様では、ファイルは xml ベースにすることも、xml ファイルとその他のファイルを含む zip ファイルにすることもできます。

どちらの場合もファイル拡張子は同じです。ファイルをテストして、解凍する必要があるか、単に読み取る必要があるかを判断するには、どのような方法がありますか?

4

9 に答える 9

23

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 バイトは、16 進値 0x04034b50 であるファイル署名である必要があることがわかります。ファイルのバイト順は逆です。PKWARE では、「特に指定がない限り、すべての値はリトル エンディアンのバイト順で格納される」と指定されているため、16 進エディタを使用してファイルを表示すると、50 4b 03 04 が次のように表示されます。最初の 4 バイト。

これを使用して、ファイルが zip ファイルであるかどうかを確認できます。ファイルをメモ帳で開くと、最初の 2 バイト (50 と 4b) が ASCII 文字 PK であることがわかります。

于 2009-12-11T10:18:19.197 に答える
12

ファイルのマジックナンバーを見ることができます。ZIP アーカイブ用のものは、ZIP 形式のウィキペディア ページにリストされていますPK\003\004 or PK\005\006

于 2009-12-11T10:09:28.747 に答える
1

マジックナンバーをファイルする

明確にするために、それは50 4b0304で始まります。

http://www.pkware.com/documents/casestudies/APPNOTE.TXT(Simon P Stevensから)を参照してください

于 2009-12-11T10:12:05.560 に答える
1

fileを使用して、それがテキストファイル(xml)であるか実行可能ファイル(zip)であるかを確認できます。下にスクロールして例を確認します。

于 2009-12-11T10:12:29.723 に答える
1

ファイルの最初の数バイトでマジック ナンバーを確認します。Zip ファイルは PK (50 4B) で始まります。XML ファイルはこれらの文字で始まることはできず、依然として有効であるため、ファイルの種類についてかなりの確信が持てます。

于 2009-12-11T10:09:36.097 に答える
1

ただし、良い解決策ではありませんが、負荷を考えているだけです...どうですか:

try
{
LoadXmlFile(theFile);//Exception if not an xml file
}
catch(Exception ex)
{
LoadZipFile(theFile)
}
于 2009-12-11T10:49:50.770 に答える
1

ファイルをチェックして、有効な XML ヘッダーが含まれているかどうかを確認できます。そうでない場合は、解凍してみてください。

XML 仕様については、ここをクリックしてくださいを参照してください。

于 2009-12-11T20:15:13.513 に答える
0

使用しているものによって異なりますが、zipライブラリには、ファイルがis_zip、test_file_zipなどのzipファイルであるかどうかをテストする関数がある場合があります...

または、上記のマジックナンバーを使用して独自の関数を作成します。

于 2009-12-11T10:14:51.513 に答える
0

あなたはそれを解凍してみることができます.XMLファイルは有効なzipファイルである可能性は非常に低いか、他の人が言っているようにマジックナンバーをチェックする可能性があります.

于 2009-12-11T10:10:53.550 に答える