アプリのドキュメント ディレクトリ内のファイルが zip ファイルかどうかを判断する必要があります。ファイル名は、この決定に使用できません。そのため、MIME タイプを読み取るか、zip にのみ適用される他のプロパティを見つける必要があります。
注: ファイルがかなり大きくなる可能性があるため、ファイル全体をメモリに配置する必要があるソリューションは理想的ではありません。
アプリのドキュメント ディレクトリ内のファイルが zip ファイルかどうかを判断する必要があります。ファイル名は、この決定に使用できません。そのため、MIME タイプを読み取るか、zip にのみ適用される他のプロパティを見つける必要があります。
注: ファイルがかなり大きくなる可能性があるため、ファイル全体をメモリに配置する必要があるソリューションは理想的ではありません。
http://www.pkware.com/documents/casestudies/APPNOTE.TXTによると、ZIP ファイルは「ローカル ファイル ヘッダー署名」で始まります。
0x50, 0x4b, 0x03, 0x04
そのため、ファイルが ZIP ファイルであるかどうかを確認するには、最初の 4 バイトを読み取るだけで十分です。実際にファイルを抽出してみて初めて、明確な決定を下すことができます。
ファイルの最初の 4 バイトを読み取る方法は多数あります。NSFileHandle、NSInputStream、open/read/close などを使用できます。したがって、これは考えられる 1 つの例としてのみ使用する必要があります。
NSFileHandle *fh = [NSFileHandle fileHandleForReadingAtPath:@"/path/to/file"];
NSData *data = [fh readDataOfLength:4];
if ([data length] == 4) {
const char *bytes = [data bytes];
if (bytes[0] == 'P' && bytes[1] == 'K' && bytes[2] == 3 && bytes[3] == 4) {
// File starts with ZIP magic ...
}
}
スウィフト 4 バージョン:
if let fh = FileHandle(forReadingAtPath: "/path/to/file") {
let data = fh.readData(ofLength: 4)
if data.starts(with: [0x50, 0x4b, 0x03, 0x04]) {
// File starts with ZIP magic ...
}
fh.closeFile()
}