是否正在复制文件

时间:2017-04-09 12:51:35

标签: javascript node.js file file-io fs

我有一个Node.js程序,它定期循环遍历目录中的视频文件。如果添加或删除了文件,程序将更新数据库以反映此更改。添加文件时,FFmpeg用于生成缩略图。

当我尝试在当前正被复制到目录的文件上运行FFmpeg时,我遇到了问题。由于文件不完整,FFmpeg无法生成缩略图。如果我知道文件何时被复制,我可以忽略它,并且下次扫描目录时它会被拾取。

如何确定当前是否正在复制文件,或者如何循环忽略当前正在复制文件的目录?

2 个答案:

答案 0 :(得分:1)

假设您有两个进程,一个用于写入文件,另一个用于对写入的文件进行操作:

  1. 将您的文件写入临时文件名(/ tmp / filename)
  2. 复制完成后,立即将其链接到目标目录。
  3. 使用此策略,缩略图进程会在目标目录中查看更改,现在可以保证只包含完整文件。

    请参阅fs.watch,以便您观看"一个变更目录。

答案 1 :(得分:0)

找到文件后,取当前大小(以字节为单位),然后在1秒后检查文件,并检查文件大小是否仍然相同。如果不是,则表示当前正在写入文件。