2012-02-13 6 views
1

私が起動すると:TrueZipを使用して.tar.gzファイルを.zipに変換しますか?

File input = new File("cmake.tar.gz"); 
TFile sourceFile = new TFile(input); 
TFile targetFile = new TFile(File.createTempFile("cmake", ".zip")); 
try 
{ 
    TFile.cp_rp(sourceFile, targetFile, TArchiveDetector.NULL); 
} 
finally 
{ 
    TFile.umount(targetFile); 
} 

私が手:

java.io.IOException: C:\Users\Gili\AppData\Local\Temp\cmake4527983120069708378.zip (not a directory) 
     at de.schlichtherle.truezip.file.TBIO.cp_r0(TBIO.java:163) 
     at de.schlichtherle.truezip.file.TBIO.cp_r(TBIO.java:142) 
     at de.schlichtherle.truezip.file.TFile.cp_rp(TFile.java:3364) 
     at com.googlecode.cmakemavenproject.GetBinariesMojo.download(GetBinariesMojo.java:275) 

は、どのように私は.tar.gzのファイルの内容を含む新しい.zipファイルを作成するために、TrueZipを指示することができますか?

答えて

1

問題は、File.createTempFile(*)を呼び出すと、ターゲットアーカイブファイルが既に空のファイルとして存在していることです。このファイルは、TrueZIP Kernelによって偽陽性のアーカイブファイルとして扱われます。このロジックによれば、TFile.cp_rp(*)を呼び出すと仮想ディレクトリをプレーンファイルに再帰的にコピーしようとしますが、これは動作しません。

コードを機能させるには、File.createTempFile(*)が返すオブジェクトのFile.delete()を呼び出します。あなたのコードの残りの部分はうまくいくはずです。

0

私はTrueZipを使用していませんが、APIドキュメントをすばやくスキャンすると、このようにTFileを使用できないと結論づけられます。 TFileオブジェクトは、単一のメンバのアーカイブを表します。すべてのメンバーをコピーする場合は、入力メンバーを繰り返し処理し、それぞれをコピーする必要があります。

アーカイブ全体を処理するAPIがあるかもしれませんが、私はそれを見ませんでした。

+0

確かに、ファイルを追加するために実際にアーカイブを作成するにはどうすればよいですか? – Gili

+0

私はあなたが執筆のためにメンバーを開いたときにそれが作成されると信じています。 –

+0

申し訳ありません。 TFileオブジェクトは、仮想ファイルシステム空間内の任意のエンティティをアドレス指定することができる。プレーン・ファイル、プレーン・スペシャル・ファイル、プレーン・ディレクトリ、またはアーカイブ・ファイル内の任意のバーチャル・バリアントである。 –

関連する問題