12

2 つのファイルを作成する JNI 経由で C++ メソッドを呼び出しています。指定されたディレクトリ内のテキスト ログ ファイルと pdf ファイル。JNI メソッドを実行する前に、これらのファイル (存在する場合) を削除したいと考えています。

そのために Apache commons.io (FileUtils.forceDelete(File file)) を使用しています。実行すると、IOException が発生します。

java.io.IOException: Unable to delete file: D:\Folder\file.log

File.canWrite() メソッドで delete メソッドを起動する前に、ファイルの書き込み可能状態を確認します。ファイルと親ディレクトリの両方に対して true を返します。

ファイルの削除に問題がある理由がわかりましたか? 私が知る限り、ファイルを作成している C++ メソッドは、メソッドの終了後にファイルを閉じたり、ロックを解除したりしています。とにかく、私は C++ コードのソース コードにアクセスできないので、それが本当に当てはまるかどうかを確認したり、コードを変更したりすることはできません。

ありがとう、マルコ

4

2 に答える 2

9

ほとんどの場合、別のプロセスによってロックされています。OS レベルで別のプロセスがロックしている場合 (たとえば、ファイルをテキスト エディターで開いた場合)、うまくいきません。他の何かがファイルをロックしている場合、Windows エクスプローラーでさえファイルの削除に失敗することがあります。ただしjava.nio.channels.FileLock、関連する API 呼び出しを参照してください。

于 2011-05-12T12:45:13.513 に答える
2

ほとんどの場合、別のプロセスがfile.log開いたままになっているため、そのプロセスを削除できません。

于 2011-05-12T12:39:30.107 に答える