我有两个并行运行的应用程序,它们都执行以下操作:
我获取文件,我也锁定它们,以便其他应用程序无法处理它。但是当重命名文件时,我遇到了问题。要重命名该文件,想要使用File.renameTo函数。但是,要实现这一点,我必须释放文件上的锁。但是当我释放锁时,另一个进程可能会尝试使用该文件。确实应该不会发生。
有没有办法阻止应用程序B在应用程序A释放锁定和完成重命名文件之间使用该文件?
修改 的
更多信息:
注意:在linux上,可以重命名被锁定的文件,因此不会出现此问题。但是,在Windows上,无法重命名锁定的文件;我必须释放锁,然后重命名它。但是释放锁定的时间会使其他应用程序看到文件可用,然后他们会尝试使用它。
答案 0 :(得分:1)
Windows应用程序可以使用SetFileInformationByHandle
功能执行此操作,该功能允许您使用已打开的句柄重命名文件。您可能无法从Java本地执行此操作。
但是,更简单的解决方案是在开始处理之前重命名文件(例如,filename+processing
)。无论哪个进程以这种方式成功重命名文件,都要负责处理它并最终将其重命名为filename+processed
。