【发布时间】:2020-06-30 02:10:48
【问题描述】:
我在 node.js 中有代码,它将使用 fast-csv 读取 CSV 文件。
此 CSV 文件由另一个节点应用程序 (X) 生成,我无法控制它。
X 将在这个文件中写入数据。
如果 X 尝试写入,而我的代码同时尝试读取会怎样?
问题:
在这种情况下我的代码会出现异常吗?
如果是,应该如何处理?
我试图检查文件是否打开
fs.open('/Users/meenalyengul/Documents/fotsWorkspace/fots/lib/newDemo/files/test.xlsx', 'r+', function(err, fd) {
if (err && err.code === 'EBUSY') {
}
});
此代码不适用于 mac。
【问题讨论】:
-
简而言之,这就是我们发明数据库的真正原因。
-
尝试回答这几个问题以获得相关帮助: 1) 该文件是否持续增长?在某些时候这个文件被关闭了吗? 1)这个文件有多大? 2)程序如何知道文件名? 3)你什么时候可以开始阅读这个文件?你有回调端点吗? 4) 你是这个 X 程序的发起者吗?
-
这因操作系统而异。在 Windows 中,如果文件的编写者以独占模式打开它(防止其他人打开它进行读/写),那么当您尝试打开它时会出现错误,并且您可能想要实现某种重试算法。如果其他应用程序没有以这种独占模式打开它,那么您只是遇到了并发问题,正如其他评论者所说,这是数据库擅长的,而不是平面文件。可能,您需要编写一个测试应用程序来确切了解当两个进程都尝试同时访问文件时的行为。
-
@jfriend00 EBUSY 检查在 windows 上有效,但在 mac 上无效。
-
@Eric 1. 程序 X 将随时使用大量数据写入此文件。但不是连续的。我不确定此文件是否已关闭。 2. 在这个文件中可能有 100 条记录。 3.文件名可配置。我的代码是 cron 作业,每 15 分钟运行一次。 4. 我对程序 X 没有任何控制权
标签: javascript node.js fs