apache commons 圧縮ライブラリを使用して、「有効な」tar.gz アーカイブを作成しようとしています。作成されたアーカイブは組み込みデバイスによって読み取られ、同じファイル権限を持つ同じ形式でなければなりません。
ファイルの作成に Linux を使用している場合はすべて問題なく動作しますが、Windows を使用している場合は. ファイルは拒否されます。
ご覧のとおり、アーカイブには unix パーミッションを持つ特別なファイルのみが含まれています。これらは正しく設定されており、「動作中の」tar ファイルを使用して gzip で実行すると、作成された tar.gz も正常に動作します。
私が理解した唯一の違いは、動作していない tar ファイルがわずかに大きく (56 kb ではなく 61)、7zip がUnixではなく"Host OS" FATの下に表示されることです。
Windowsから「本物の」tarアーカイブを作成するにはどうすればよいですか?
前もって感謝します!
私の現在のソースコードは次のとおりです。
public static void compress(File configTar, File rcConf, File databaseTxt)
throws ArchiveException, IOException {
OutputStream tarFileStream = new GZIPOutputStream(new FileOutputStream(configTar));
InputStream rcConfStream = new FileInputStream(rcConf);
InputStream databaseTxtStream = new FileInputStream(databaseTxt);
ArchiveOutputStream archiveOutputStream = new ArchiveStreamFactory()
.createArchiveOutputStream(ArchiveStreamFactory.TAR, tarFileStream);
TarArchiveEntry databaseTxtEntry = new TarArchiveEntry(databaseTxt);
TarArchiveEntry rcConfEntry = new TarArchiveEntry(rcConf);
databaseTxtEntry.setName("database.txt");
databaseTxtEntry.setGroupName("root");
databaseTxtEntry.setUserName("root");
databaseTxtEntry.setMode(convertModeFromString("rwxr-xr-x"));
archiveOutputStream.putArchiveEntry(databaseTxtEntry);
IOUtils.copy(databaseTxtStream, archiveOutputStream);
archiveOutputStream.closeArchiveEntry();
rcConfEntry.setName("rc.conf");
rcConfEntry.setGroupName("root");
rcConfEntry.setUserName("root");
rcConfEntry.setMode(convertModeFromString("rw-rw-rw-"));
archiveOutputStream.putArchiveEntry(rcConfEntry);
IOUtils.copy(rcConfStream, archiveOutputStream);
archiveOutputStream.closeArchiveEntry();
archiveOutputStream.finish();
rcConfStream.close();
databaseTxtStream.close();
tarFileStream.close();
}
いくつかの調査を行ったところ、TAR ヘッダーの違いに気付きました。誰が私が間違っているのか教えてもらえますか?
Working example of file 1:
http://i.stack.imgur.com/S8Rbi.jpg
NON-Working example of file 1:
http://i.stack.imgur.com/bdc9T.jpg
Working example of file 2:
http://i.stack.imgur.com/rYhr9.jpg
NON-Working example of file 2:
http://i.stack.imgur.com/4wHw3.jpg