【发布时间】:2016-06-07 13:50:41
【问题描述】:
我有两个节点线程正在运行,一个监视一个目录以进行文件消耗,另一个负责将文件写入给定目录。
通常它们不会在同一个目录上运行,但对于我正在处理的边缘情况,它们将是。
似乎消费应用在文件完全写入之前抓取了文件,导致文件损坏。
有没有办法在写入完成之前锁定文件?我研究了lockfile 模块,但不幸的是我不相信它适用于这个特定的应用程序。
=====
完整的代码放在这里远不止是有意义的,但它的要点是这样的:
- 应用衍生出观察者和听众
听众:
- 监听添加到数据库的文件,使用
fs.writeFile导出
观察者:
- watcher 使用
chokidar跟踪每个被监视目录中添加的文件 - 当找到
fs.access时会调用以确保我们可以访问该文件-
fs.access似乎对正在写入的文件不以为然
-
- 文件通过
fs.createReadStream消费,然后发送到服务器- filestream 是必要的,因为我们需要文件哈希
在这种情况下,文件被导出到监视目录,然后重新导入 通过监视进程。
【问题讨论】:
-
这是两个独立的程序,还是只是两个不同的功能?
-
虽然它是一个应用程序,但监视类不知道另一个。此外,一旦完全实现,它们将被移动到衍生线程中
-
如果你能提供一些代码也很棒。人们倾向于对没有代码的事情投反对票。