Java Linux:如何检查我的手表文件夹中的文件副本是否已完成?
我有一个文件夹,不同的用户可以在其中放置他们的文档,如pdf、tif等。 如果有任何新文件,我会每分钟检查一次这个文件夹,如果有,我会选择那个文件进行处理 但是,我不想选择这个文件,以防它仍然被复制。 在这种情况下,我会选择在未来的周期 但我面临的问题是。 那我怎样才能检查文件副本是否已在我的文件夹中完成 我已经试过以下方法了。 1) 尝试使用C程序以写模式打开文件。 但我可以在写模式下打开它,即使它仍在被复制 2) 使用lsof命令检查某个进程是否与此关联。 但对于非root用户,该命令不会给出结果Java Linux:如何检查我的手表文件夹中的文件副本是否已完成?,java,c,linux,shell,Java,C,Linux,Shell,我有一个文件夹,不同的用户可以在其中放置他们的文档,如pdf、tif等。 如果有任何新文件,我会每分钟检查一次这个文件夹,如果有,我会选择那个文件进行处理 但是,我不想选择这个文件,以防它仍然被复制。 在这种情况下,我会选择在未来的周期 但我面临的问题是。 那我怎样才能检查文件副本是否已在我的文件夹中完成 我已经试过以下方法了。 1) 尝试使用C程序以写模式打开文件。 但我可以在写模式下打开它,即使它仍在被复制 2) 使用lsof命令检查某个进程是否与此关联。 但对于非root用户,该命令不会给
注意:我可能是Linux上的非root用户。在大多数情况下,如果文件有一段时间没有被修改,那么假设拷贝已经完成就足够了。处理过去15分钟内未修改的文件:
find . -mmin +15
正确的解决方案需要所有程序执行某种类型的锁定:
您可以使用内核的功能来侦听IN_CLOSE_WRITE事件。
复制完成后,程序关闭文件句柄,从而触发此事件
在关闭时写入(+)为写入而打开的文件已关闭 例如,有两个示例如何从shell使用它
与C一起使用的示例您能说明哪些部分是用C、Java和shell脚本完成的吗?但这并不能告诉您为什么文件被关闭。例如,通过FTP上载文件时,连接丢失。如果您需要确切地知道整个文件已被复制,则需要使用某种方法进行沟通,例如在复制完成后重命名文件。15分钟的时间太长。