如何在同一个csv文件上同时进行修改?

问题描述 投票:1回答:1

我在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上不起作用。

javascript node.js fs
1个回答
0
投票

您已经描述了没有好的解决方案的情况。在Mac平台上,显然没有对该文件的独占访问权,因此使用常规文件操作,您无法分辨该文件何时由不受您控制的另一个程序使用或不使用。

[如果您通过观察该修改文件的其他程序可以修改该文件,然后有一定的安静时间,则可以在再次修改文件之前不修改该文件(例如,修改文件的频率不比每次修改的频率高几分钟),然后您就可以依靠它了,然后我就想到了hack。

您要做的是,您将有一个始终运行的nodejs程序,并监视感兴趣的文件。当您看到更改时(通过查看修改时间或文件大小或同时查看文件大小),则需要等待一些规定的时间以确保修改完成(根据观察到的访问模式,大概10秒)通过程序更改文件),您很快就会将该文件复制到自己的文件名中。然后,您每隔15分钟运行一次的cron作业就可以将该文件副本用作最新数据的安全副本,在您读取文件时不会对其进行修改。

为了观看文件的修改,您可以使用自己的代码每30秒轮询一次文件统计信息,也可以使用fs.watch()动态地监视文件的更改。要复制文件,可以使用fs.copyFile()

© www.soinside.com 2019 - 2024. All rights reserved.