首页 > 解决方案 > 如何处理同一个csv文件的同时修改?

问题描述

我在 node.js 中有代码,它将使用 fast-csv 读取 CSV 文件。

此 CSV 文件由另一个节点应用程序 (X) 生成,我无法对其进行任何控制。

X 将在这个文件中写入数据。

如果 X 会尝试写入,而我的代码会同时尝试读取会怎样?

问题:

  1. 在这种情况下,我的代码会出现异常吗?

  2. 如果是的话应该是什么方法来处理这个?

我试图检查文件是否打开

fs.open('/Users/meenalyengul/Documents/fotsWorkspace/fots/lib/newDemo/files/test.xlsx', 'r+', function(err, fd) {
  if (err && err.code === 'EBUSY') {

  }
});

此代码不适用于 mac。

标签: javascriptnode.jsfs

解决方案


您描述了一种没有好的解决方案的情况。在 Mac 平台上,显然没有对文件的独占访问权限,因此使用您的正常文件操作,您无法判断文件何时被您无法控制的其他程序使用。

如果您可以通过观察这个修改文件的其他程序修改文件然后有一段安静的时间,在它再次修改文件之前它没有修改文件(就像它修改文件的频率不超过每隔几分钟),这看起来像你可以依赖的东西,那么我可以想到一个黑客。

您要做的是拥有一个始终运行并监视感兴趣的文件的 nodejs 程序。当您看到它发生变化时(通过查看修改时间或文件大小或两者兼而有之),然后您将等待一些规定的时间以确保完成修改(可能 10 秒,基于您观察到的访问模式通过程序更改文件),您可以快速将文件复制到您自己的文件名。然后,您每 15 分钟运行一次的 cron 作业可以将该文件副本用作最新数据的安全副本,在您阅读它时不会被修改。

要查看文件的修改,您可以使用自己的代码每 30 秒左右轮询一次文件统计信息,也可以使用fs.watch()动态查看文件的更改。要制作文件的副本,您可以使用fs.copyFile().


推荐阅读