javascript - 如何检查该文件没有被其他进程打开?

标签 javascript firefox-addon firefox-addon-sdk

我如何检查该文件没有被其他进程打开?

现在我使用 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/

相关文章:

javascript - JSON Highcharts绘制多条线

javascript - JS - 使用正则表达式获取字符串替换的原始值

javascript - XUL 将事件附加到使用 javascript 添加的 anchor

javascript - 如何从 html 按钮调用 Firefox 扩展中的函数

javascript - 在 Firefox 插件中使用外部 javascript 文件

firefox-addon - Mozilla Addon 开发检查环境

javascript - ngTouch ngClick 不冒泡

javascript - 如何使用 Node.js MongoDB 驱动程序插入 long/BigInt?

javascript - 如何记录301重定向URL?

firefox-addon - 在 Firefox 插件中响应 "Clear history when Firefox closes"