【问题标题】:Node not reading full contents of file节点未读取文件的全部内容
【发布时间】:2020-12-28 20:52:14
【问题描述】:

我试图让它读取和解析一个 json 文件以更新它,但它没有读取完整的文件,它在很多文件之后停止并且不再读取它。这是一个巨大的 json 文件,因为除了多个 json 文件之外,我真的无法将它存储为其他任何东西。 CacheManager的代码是here

它读取的大小是143,360,文件的实际大小是153,840。我从来没有真正遇到过这个问题,所以我不知道如何解决它。我在代码中使用了fs-extra,但我已经验证内置fs 模块也会出现同样的问题。我也打印了它所得到的内容,所以我可以看到它正在读取文件,并且正在读取正确的内容,只是没有得到所有内容。我将链接right contentwhat it's getting。它在最后被切断,您可以看到 md5 的 json 部分。将其写入文件的代码只是将读取文件的原始内容写入here(查看第一个屏幕截图下方的部分以查看常规代码)

【问题讨论】:

  • 您可以编辑您的问题并在您正在读取文件和解析输出的位置添加代码部分吗?
  • 看下面的截图,代码所在的github repo有一个链接
  • 在 SO 上不鼓励链接,因为它们可能会变得陈旧,因此可能会削弱您对未来读者的提问。正确的方法是将您的代码包含在问题中。
  • 到目前为止似乎正在使用 readJsonSync,我将围绕它重写我的代码以确保

标签: javascript node.js fs


【解决方案1】:

如果问题是由文件大小引起的,您可以查看标准 JSON 解析的一些流式解析替代方案(如 https://www.npmjs.com/package/stream-json)。

注意:我会检查并通知您

为读者编辑:到目前为止,似乎某种竞赛和 SO 缓存,在 cmets 中进行讨论。

【讨论】:

  • 让我困惑的部分是它只是偶尔发生,而不是每次都发生
  • 我尝试过标准 JSON.parse 和 readFileSync 也没有问题。同时有没有更新文件的过程?
  • 这里发生了工作线程,我尝试将所有更新移到主进程中,以便它们都将其发送到那里,但实际上并没有排队,它们仍在运行它接收它们
  • 那么,可能会出现 CacheManager 的 update 方法中的 fs.writeFileSync 已经写完,但是 SO 还在更新文件。尝试在更新方法的末尾添加 fs.fsyncSync(this.file)。
  • 在添加 fsync 位后看起来工作至今,谢谢
猜你喜欢
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-18
  • 1970-01-01
  • 2020-03-09
  • 2011-05-06
  • 1970-01-01
相关资源
最近更新 更多