1

私が呼び出すとき:

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 に指示するにはどうすればよいですか?

4

2 に答える 2

1

問題は、File.createTempFile(*) を呼び出すと、対象のアーカイブ ファイルが既に空のファイルとして存在することです。このファイルは、TrueZIP カーネルによって誤検知のアーカイブ ファイルとして扱われます。このロジックによると、その後の TFile.cp_rp(*) への呼び出しは、仮想ディレクトリを単純なファイルに再帰的にコピーしようとしますが、これは機能しません。

コードを機能させるには、File.createTempFile(*) によって返されたオブジェクトに対して File.delete() を呼び出すだけです。その後、コードの残りの部分が機能するはずです。

于 2012-02-16T13:01:22.747 に答える
0

私は TrueZip を使用したことはありませんが、API ドキュメントをざっと見てみるとTFile、この方法では使用できないという結論に達しました。TFileオブジェクトは、アーカイブの 1 つのメンバーを表します。すべてのメンバーをコピーする場合は、入力メンバーを自分で反復処理して、それぞれをコピーする必要があります。

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

于 2012-02-13T19:57:36.153 に答える