如何解决如何确保在 NodeJS 中读取操作期间文件内容没有被修改?
假设我们有一个文件(小于 1MiB)。这个文件可以不时被一些程序(git)修改(或删除)。 Node 应用程序也会不时读取此文件。
如何保证Node应用读取的文件内容处于一致状态?
以下是我担心可能发生的情况的示例。
- 文件的初始状态(A、B、C 只是文件的不同部分):
ABC
。 - 节点应用读取文件统计信息 (mtimeMs)。
- Node 应用开始读取文件并读取
A
。 - 其他进程开始写入文件并写入
A
使其成为A*
并写入B
使其成为B*
(文件状态:A*B*C
)。 - 节点应用读取
B*
和C
。 - 节点应用读取文件统计信息 (mtimeMs)。
- 其他进程写入
C
使其成为C*
(文件状态:A*B*C*
)。 - 操作系统写入新文件修改时间。
因此,Node 应用程序会得到不一致的文件状态 AB*C
,而操作前后读取的 mtimeM 是相同的。
注意:暂时阻止对文件的写操作不是一个选项。
解决方法
您可以从读取的字符串中获取哈希值,然后在文件之后进行比较,如果它们相同,则您知道数据相同,如果不相同,则重试直到它发生。
我不知道字符串中的哈希值和文件中的哈希值是否相同...然后您可以在读取数据之前和之后从文件中获取哈希值,如果它们不同,让您的代码重试,直到它们不是。
示例:https://gist.github.com/GuillermoPena/9233069
,您可以开始观看您正在阅读的文件,并在阅读时采取适当的措施。
https://nodejs.org/docs/latest/api/fs.html#fs_fs_watchfile_filename_options_listener
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。