微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何确保在 NodeJS 中读取操作期间文件内容没有被修改?

如何解决如何确保在 NodeJS 中读取操作期间文件内容没有被修改?

假设我们有一个文件(小于 1MiB)。这个文件可以不时被一些程序(git)修改(或删除)。 Node 应用程序也会不时读取此文件
如何保证Node应用读取的文件内容处于一致状态?
以下是我担心可能发生的情况的示例。

  1. 文件的初始状态(A、B、C 只是文件的不同部分):ABC
  2. 节点应用读取文件统计信息 (mtimeMs)。
  3. Node 应用开始读取文件并读取 A
  4. 其他进程开始写入文件并写入 A 使其成为 A* 并写入 B 使其成为 B*文件状态:A*B*C)。
  5. 节点应用读取 B*C
  6. 节点应用读取文件统计信息 (mtimeMs)。
  7. 其他进程写入 C 使其成为 C*文件状态:A*B*C*)。
  8. 操作系统写入新文件修改时间。

因此,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 举报,一经查实,本站将立刻删除。