我有一个Node.js程序,它周期性地通过目录中的视频文件循环。如果添加或删除文件,程序将更新数据库以反映此更改。添加文件时,使用FFmpeg生成缩略图。被复制的文件
我尝试在当前正在复制到目录的文件上运行FFmpeg时出现问题。由于文件不完整,FFmpeg无法生成缩略图。如果我知道某个文件正在被复制的时间,我可以忽略它,并且在下一次扫描该目录时它会被拾取。
如何确定当前是否正在复制文件,或者如何循环目录而忽略当前复制文件?
我有一个Node.js程序,它周期性地通过目录中的视频文件循环。如果添加或删除文件,程序将更新数据库以反映此更改。添加文件时,使用FFmpeg生成缩略图。被复制的文件
我尝试在当前正在复制到目录的文件上运行FFmpeg时出现问题。由于文件不完整,FFmpeg无法生成缩略图。如果我知道某个文件正在被复制的时间,我可以忽略它,并且在下一次扫描该目录时它会被拾取。
如何确定当前是否正在复制文件,或者如何循环目录而忽略当前复制文件?
找到文件后,以字节为单位获取当前大小,然后在1秒钟后检查文件,并检查文件大小是否仍然相同。如果不是,则表示该文件正在写入。
我想这可以在大多数情况下工作,但我经常注意到我的文件传输需要几秒钟才能完成,有时会冻结几秒钟,这会导致一些误报。 – user2248702
因为你正在使用node.js,你可以同时用多个文件来做到这一点。您可以将检查间隔增加到例如。 10秒,或增加检查量。我相信这是做到这一点的唯一方法,不知道任何操作系统中的任何功能都可以满足您的需求。 –
假设你有两个过程,一个是写文件和一个书面的文件进行操作:
使用此策略,您的缩略图进程将监视目标目录中的更改,现在可以保证只包含完整文件。
请参阅fs.watch它允许您“观察”目录以进行更改。
你有没有想过“如果文件完成复制,**是完整且正确的**”?你将如何解决这个问题?你有控制文件传输过程吗? –
@AndrewHenle复制是由用户将文件复制或拖拽到目录中完成的。希望操作系统负责成功复制文件。如果文件以某种方式损坏,则程序将退出并显示错误。 – user2248702