2016-11-22 2 views
0

Ich habe zwei JavaScript-Datei zum Lesen und Schreiben einer gemeinsamen Textdatei. Erstellt einen Taskplaner, um diese JavaScript-Datei gleichzeitig auszuführen. Also muss ich das Lock-Konzept in Skripten implementieren. Gibt es in JavaScript ein Lock-Konzept?Behandeln Sie gleichzeitiges Schreiben in eine Datei in JavaScript

Weitere Klärung Frage:

ich nicht node.js. bin mit einfach ist es eine jscript-Datei.

Es gibt zwei JScript-Datei, Datei A und Datei B.

Beiden Dateien von einem Task-Scheduler zu einem Zeitpunkt, 10.00 Uhr konfiguriert sind.

Beide Dateien lesen eine Textdatei D. Aktualisiert einen Text und schreibt erneut darauf.

Wenn es irgendeine Ressourcenverknappung wie, Datei A und Datei B gibt Textdatei D gleichzeitig aber unterschiedlichen Inhalt schreiben.

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

Verwenden Sie node.js, da Sie dieses Tag scheinbar nicht eingeschlossen haben. Können Sie Ihren Code anzeigen und welches Problem versuchen Sie zu lösen? Javascript benötigt normalerweise keine Form der Verriegelung, da es single threaded ist. – Keith

+0

so weit ich weiß Javascript kann nicht auf das Dateisystem zugreifen, zumindest nicht clientside – Dellirium

+0

Können Sie mir bitte zeigen, wie Sie in Datei mit JS schreiben? Ich bin gespannt, wie es gemacht wird. – Justinas

Antwort

0

Die Datei FileSystemObject unterstützt keine Dateisperrung. Das Beste, was Sie tun können, ist, die Datei vor dem Schreiben zu löschen. Beachten Sie, dass Sie zunächst eine leere Datei unter FileLocation erstellen müssen.

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; 
} 

Es gibt auch die append-Trick, siehe auch How can I determine if a file is locked using VBS? See. Aber das ist nicht sicher zu verwenden, wenn Sie nicht anhängen möchten.

+0

Danke für die Antwort –

Verwandte Themen