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