处理JavaScript中的并发写入文件

时间:2016-11-22 10:47:40

标签: javascript jscript

我有两个用于读取和编写公共文本文件的JavaScript文件。创建了一个任务调度程序,以便同时运行此JavaScript文件。所以我需要在脚本中实现锁定概念。 JavaScript中是否存在任何锁定概念?

更多关于问题的澄清:

我没有使用node.js.只是它是一个jscript文件。

有两个Jscript文件,文件A和文件B.

这两个文件都是由任务计划程序在上午10点配置的。

两个文件都在读取文本文件D.更新一些文本并再次写入。

如果发生任何资源匮乏之类的, 文件A和文件B同时写入文本文件D但内容不同。

try {
    var objectFile = new ActiveXObject("Scripting.FileSystemObject");
    var writingFile;

    if(objectFile.FileExists(FileLocation))
    {
        var fileSpecified = objectFile.GetFile(FileLocation);
        writingFile = fileSpecified.OpenAsTextStream( 8, 0 );
    }

    else
    {
        writingFile= objectFile.CreateTextFile(FileLocation, true);
    }

    writingFile.WriteLine(Date());

    writingFile.WriteLine("test data");     

    writingFile.Close();
}
catch(e)
{
    return true;
}

1 个答案:

答案 0 :(得分:0)

FileSystemObject不支持文件锁定。 您可以做的最好是在写入之前删除该文件。请注意,最初您必须在FileLocation创建一个空文件。

try {
    var fso = new ActiveXObject("Scripting.FileSystemObject");

    try {
      fso.DeleteFile(FileLocation); // Will throw if file does not exist
      var writingFile= fso.CreateTextFile(FileLocation);
      writingFile.WriteLine(Date());
      writingFile.WriteLine("test data");     
      writingFile.Close();
    } catch(e) {
      // File did not exist, so somebody is currently writing it.
    }
}
catch(e)
{
    return true;
}

还有附加技巧,请参阅 另见How can I determine if a file is locked using VBS?。 但如果您不想追加,则无法保存。