2016-09-13 2 views
1

Wie kann ich überprüfen, dass die Datei nicht von einem anderen Prozess geöffnet wird?Wie überprüft man, dass die Datei nicht von einem anderen Prozess geöffnet wird?

Jetzt benutze ich OS.File.move (...) Datei hin und her zu bewegen:

var promise = OS.File.move(filePath, newFilePath); 

promise.then(
    function onFulfilled(){ 
     OS.File.move(newFilePath, filePath); 

     // Success 
    }, 
    function onRejected(){ 
     // Fail. Ask user to close another application 
    } 
); 

Aber diese Lösung ist seltsam. Gibt es eine andere Möglichkeit, diese Überprüfung durchzuführen?

Antwort

0

Öffnen Sie es einfach selbst. Wenn es geöffnet werden kann, können Sie tun, was Sie damit machen wollen. Wenn nicht, bitten Sie den Bediener zu schließen und nach seiner Bestätigung, dass es geschlossen ist, versuchen Sie es erneut

+0

Dies funktioniert nur für Windows. In Linux/Unix wird es nicht. Siehe meine Lösung unten. – Noitidart

1

Dies ist eine gute Frage. Und du hast dort eine großartige Lösung! Sie wollen wahrscheinlich bei dieser Methode bleiben. Ich habe nie auf diese Weise, ich muss es auf Mac/* nix testen, um sicherzustellen, aber es klingt wie es sollte funktionieren, als ob eine Datei verwendet wird, sollte es nicht beweglich sein. Ich habe damit vor ein paar Jahren gekämpft.

Auch eher dann bewegen, können Sie eine Umbenennung tun. Das Umbenennen ist dasselbe wie OS.File.move, aber in dasselbe Verzeichnis.

Der Nicht-Trick Weg erfordert js-ctypes:

Unter Windows Sie diese OS.File.open tun kann, und wenn das nicht klappt, dann ist es offen. Wenn es gelingt, stellen Sie sicher, .close() wie es nicht von anderen verwendet wurde. Dies funktioniert nicht auf mac/* nix, da open alles öffnen kann.

auf Mac/* nix Sie haben open verwenden dann fcntl dann close über js-ctypes wie ich hier tat: https://github.com/Noitidart/Profilist/blob/219f225643828a000c60d01ea212505bb0817ff5/modules/workers/MainWorker.js#L1313

Sie können in derselben Funktion in dem obigen Block sehen, wenn es von Windows, was ich tun die OS.File.open. Mein Code hier ist etwas komplizierter, weil ich auch die pid des Prozesses, der es geöffnet hat.

Ich definierte all dies in der ostypes lib - https://github.com/Noitidart/ostypes - Sie können das importieren und sofort verwenden.

Verwandte Themen