29

(次の部分は確かですが)ZIPアーカイブはディレクトリとして編成されていないため、ZIPエントリにはエントリのフルパス名が格納されます。メタデータには、ファイルが(ディレクトリ内に)保存される方法に関する情報が含まれています。

WindowsでZIPファイルを作成する場合、Mac OS Xなどの別のOSでデータを解凍すると、ファイル構造はWindowsの場合と同じままになります。これは、解凍プログラムがこれを処理するように設計されているためですか、それともZIP内のファイルセパレータが標準であるためですか?

zipファイルの名前を使用してZIPファイル内のエントリを検索しようとしているため、これを求めています。しかし、Windows以外のシステムで機能させるには、どのファイルセパレーターを使用する必要がありますか?

私はJavaを使用しており、メソッド:.getName()ofはZipEntry、Windowsファイルセパレーターを使用したパスを提供します\File.separator別のOSで動作させるためにJavaセパレーターを使用すれば十分でしょうか?または、可能な区切り文字ごとにファイルを検索する必要がありますか?

名誉正解言及

@Eren Yilmazによって与えられた答えは、多くのツール(または自分でコーディングできるツール)の機能を説明するのに正しいです。しかし、.zip標準がそれがどうあるべきかを明確に文書化していることを考えると、正解を更新する必要がありました

4

2 に答える 2

25

.zipファイルの仕様には次のように記載されています。

4.4.17.1ファイルの名前(オプションの相対パス付き)。保存されるパスには、ドライブやデバイスの文字、または先頭のスラッシュを含めることはできません。AmigaやUNIXファイルシステムなどとの互換性のために、すべてのスラッシュは後方スラッシュ'\'ではなく前方スラッシュ'/'でなければなりません。入力が標準入力からのものである場合、ファイル名フィールドはありません。

于 2017-06-06T10:49:00.330 に答える
18

ファイルセパレータは、zipファイルを作成するアプリケーションによって異なります。一部のアプリケーションはシステムファイル区切り文字を使用しますが、一部のアプリケーションは「文明化された」スラッシュ「/」を使用します。したがって、zipファイルを作成して使用する場合は、ファイルの区切り文字としてスラッシュを使用するだけです。zipファイルが別の場所で作成されている場合は、使用されているセパレータを確認する必要があります。簡単な方法はわかりませんが、野蛮な方法を使用して、進行中に両方のセパレータータイプを確認することができます。

一部のアプリケーション、特にカスタムzip作成コードでは、異なるzipエントリにセパレータを混在させることができるため、各エントリを確認することを忘れないでください。

于 2013-05-10T14:59:07.817 に答える