Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何处理对同一csv文件的同时修改?_Javascript_Node.js_Fs - Fatal编程技术网

Javascript 如何处理对同一csv文件的同时修改?

Javascript 如何处理对同一csv文件的同时修改?,javascript,node.js,fs,Javascript,Node.js,Fs,我在node.js中有代码,它将使用fast CSV读取CSV文件 这个CSV文件是由另一个节点应用程序(X)生成的,我对它没有任何控制权 X将在该文件中写入数据 如果X尝试写入,而我的代码同时尝试读取,会怎么样 问题: 在这种情况下,我的代码会给出异常吗 如果是,应该采取什么方法来处理 我试图检查文件是否打开 fs.open('/Users/meenalyengul/Documents/fotsWorkspace/fots/lib/newDemo/files/test.xlsx','r+',函

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

这个CSV文件是由另一个节点应用程序(X)生成的,我对它没有任何控制权

X将在该文件中写入数据

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

问题:

  • 在这种情况下,我的代码会给出异常吗

  • 如果是,应该采取什么方法来处理

  • 我试图检查文件是否打开

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

    此代码在mac上不起作用。

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

    如果您可以通过观察了解到修改文件的另一个程序修改了文件,然后在它再次修改文件之前,有一段时间它不会修改文件(就像它修改文件的频率不超过几分钟一次),这看起来是您可以信赖的,然后我可以想出一个黑客

    你要做的是,你有一个nodejs程序,它可以一直运行并监视感兴趣的文件。当您看到它发生变化时(通过观察修改时间或文件大小或两者),您需要等待一定的时间来确保修改完成(根据更改文件的程序所观察到的访问模式,可能需要10秒),并快速将文件复制到您自己的文件名。然后,每隔15分钟运行一次的cron作业就可以使用该文件的副本作为最新数据的安全副本,在读取数据时不会对其进行修改


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

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

    如果您可以通过观察了解到修改文件的另一个程序修改了文件,然后在它再次修改文件之前,有一段时间它不会修改文件(就像它修改文件的频率不超过几分钟一次),这看起来是您可以信赖的,然后我可以想出一个黑客

    你要做的是,你有一个nodejs程序,它可以一直运行并监视感兴趣的文件。当您看到它发生变化时(通过观察修改时间或文件大小或两者),您需要等待一定的时间来确保修改完成(根据更改文件的程序所观察到的访问模式,可能需要10秒),并快速将文件复制到您自己的文件名。然后,每隔15分钟运行一次的cron作业就可以使用该文件的副本作为最新数据的安全副本,在读取数据时不会对其进行修改


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

    简短的回答是,这就是我们发明数据库的真正原因。尝试回答以下几个问题以获得相关帮助:1)此文件是否持续增长?这个文件在某个时候关闭了吗?1) 这个文件能有多大?2) 程序如何知道文件名?3) 你什么时候可以开始读这个文件?您有回调端点吗?4) 你是启动这个X程序的人吗?操作系统会有所不同。在Windows中,如果文件的写入程序以独占模式打开它(防止其他任何人打开它进行读/写),那么当您尝试打开它时,将出现错误,您可能希望实现某种重试算法。如果另一个应用程序没有以这种独占模式打开它,那么你只会遇到并发问题,正如另一位评论员所说,这是数据库擅长的,而不是平面文件。可能,您需要编写一个测试应用程序来查看两个进程同时尝试访问文件时的行为。@jfriend00 EBUSY check在windows中工作,但在mac上不工作。@Eric 1。程序X将随时使用大量数据写入此文件。但不是持续的。我不确定该文件是否已关闭。2.在这个文件中,它可能有100条记录。3.文件名是可配置的。我的代码是cron作业,每15分钟运行一次。4.我对X程序没有任何控制权。简短的回答是,这就是我们发明数据库的真正原因。试着回答以下几个问题以获得相关帮助:1)此文件是否持续增长?这个文件在某个时候关闭了吗?1) 这个文件能有多大?2) 程序如何知道文件名?3) 你什么时候可以开始读这个文件?您有回调端点吗?4) 你是启动这个X程序的人吗?操作系统会有所不同。在Windows中,如果文件的写入程序以独占模式打开它(防止其他任何人打开它进行读/写),那么当您尝试打开它时,将出现错误,您可能希望实现某种重试算法。如果另一个应用程序没有以这样的独占模式打开它,那么你只会遇到并发问题,正如另一位评论员所说,这就是数据的来源