12

我通过创建两个文件的 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

它几乎肯定被另一个进程锁定了。如果它是在操作系统级别锁定的另一个进程(假设您让文件在文本编辑器中打开它),那么您将不会有太多运气。如果其他东西锁定了文件,即使是 Windows 资源管理器也可能无法删除文件。但是,请查看java.nio.channels.FileLock相关的 API 调用。

于 2011-05-12T12:45:13.513 回答
2

最有可能的是,另一个进程保持file.log打开状态,这将阻止它被删除。

于 2011-05-12T12:39:30.107 回答