2016-11-22 43 views
0

我有两个用于读写常用文本文件的JavaScript文件。创建一个任务计划程序以同时运行此JavaScript文件。所以我需要在脚本中实现锁定概念。 JavaScript中是否存在任何锁定概念?对问题在JavaScript中处理并发写入文件

更多的澄清:

我不使用node.js中只是它是一个jscript文件。

在两个JScript文件,文件和文件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; 
} 
+0

您是否使用node.js,因为您似乎没有包含此标记。你能够显示你的代码,以及你想要解决什么问题。由于它是单线程的,因此Javascript通常不需要任何形式的锁定。 – Keith

+0

据我所知javascript无法访问文件系统,至少不是客户端 – Dellirium

+0

你能告诉我你如何写入文件使用JS?我很好奇它是如何完成的。 – Justinas

回答

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?见。 但是,如果你不想追加,这不是保存使用。

+0

感谢您的回答 –