1

アーカイブ ファイルの更新に truezip バージョン (7.7.9) を使用しています。私がやっている方法は次のとおりです

File entry = new TFile(filepath);
writer = new TFileWriter(entry);
writer.append("MyString");
writer.flush();
long fileSize = entry.length(); // which always gives value as 0

何らかの目的で正確なファイル サイズが必要ですが、これは常に 0 になります。それを取得できる他の方法はありますか。

TFile クラスのドキュメントを読みました\ https://truezip.java.net/apidocs/de/schlichtherle/truezip/file/TFile.html#length() は、それが何をするのかよく理解できませんでした

4

3 に答える 3

1

公式ページのこちらの記事を参照

API は、個々のアーカイブ ファイルを仮想ディレクトリとして検出しません。これどうやってするの

これを見て

[...] ただし、FileオブジェクトがTFileクラスのインスタンスであり、有効なアーカイブ ファイルを指定するパスが検出された場合、このメソッドは常にゼロを返します。これは、アーカイブ ファイルを変更した可能性があり、変更がターゲット アーカイブ ファイルにコミットされるまで正確な結果を返すことができないためです。

TPathにも適用されます

必要なものを取得するためにFiles.size(path)を使用できるかどうか疑問に思います(TZipの変更後および変更前)

それが役立つことを願っています。

于 2016-04-26T11:42:31.770 に答える
1

アーカイブ ファイルが有効な場合は 0 を返します。問題が発生した場合は IOException を返します。

何かを変更した場合は、メソッドを呼び出してTFile.umount()すべての変更をコミットする必要があります。

次に、次のメソッドを使用して、アーカイブ ファイルを検出しない TFile を取得し、そのlength()メソッドを呼び出します。

ではTrueZIP 7.5、単に呼び出すことができますTFile.toNonArchiveFile()

// Note that the actual path may refer to anything, even a nested archive file.
TFile inner = new TFile("outer.zip/inner.zip");
TFile file = inner.toNonArchiveFile(); // convert - since TrueZIP 7.5
... // there may be some I/O here
TVFS.umount(inner); // unmount potential archive file
// Now you can safely do any I/O to $file.
long length = file.length();

別の方法でもそれを行うことができます:

private static TFile newNonArchiveFile(TFile file) {
    return new TFile(file.getParentFile(), file.getName(), TArchiveDetector.NULL);
}

リソース リンク: TrueZip を使用してアーカイブ内のファイルのサイズを取得するにはどうすればよいですか?

于 2016-04-26T12:37:00.910 に答える