我如何检查该文件没有被其他进程打开?
现在我使用 OS.File.move(...) 来回移动文件:
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
}
);
但是这个解决方案很奇怪。还有其他方法可以执行此检查吗?
最佳答案
这是一个很好的问题。你有一个很好的解决方案!您可能想坚持使用该方法。我从来没有想过这种方式,我必须在 mac/*nix 上测试它以确保,但听起来它应该可以工作,就好像一个文件正在使用它不应该是可移动的。几年前我曾为此苦苦挣扎。
您也可以进行重命名,而不是移动。重命名与 OS.File.move 相同,但位于同一目录中。
非技巧方式需要js-ctypes:
在 Windows 上,您可以执行此操作 OS.File.open
,如果失败,则将其打开。如果成功,请确保.close()
,因为它未被其他人使用。这在 mac/*nix 上不起作用,因为 open
可以打开任何内容。
在 mac/*nix 上,您必须通过 js-ctypes 使用 open
然后 fcntl
然后 close
,就像我在这里所做的那样:https://github.com/Noitidart/Profilist/blob/219f225643828a000c60d01ea212505bb0817ff5/modules/workers/MainWorker.js#L1313
您可以在上面的 block 中的同一函数中看到,如果是 Windows,我会执行 OS.File.open
。我这里的代码有点复杂,因为我还获得了打开它的进程的 pid
。
我在ostypes
lib中定义了所有这些 - https://github.com/Noitidart/ostypes - 您可以导入并立即使用它。
关于javascript - 如何检查该文件没有被其他进程打开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39472074/