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)

如何指示 TrueZip 创建一个包含 .tar.gz 文件内容的新 .zip 文件?

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对象代表档案的单个成员。如果要复制所有成员,则必须自己遍历输入成员并复制每个成员。

可能有一个 API 可以处理整个档案,但我没有看到。

于 2012-02-13T19:57:36.153 回答