如何检查该文件是否未被其他进程打开?

时间:2016-09-13 14:05:10

标签: 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
    }
);

但这个解决方案很奇怪。还有其他方法可以执行此检查吗?

2 个答案:

答案 0 :(得分:1)

这是一个很好的问题。你有一个很好的解决方案!你可能想坚持使用这种方法。我从来没有这样,我必须在mac / * nix上测试它以确保,但听起来它应该工作,就好像一个文件在使用它不应该是可移动的。几年前我一直在努力解决这个问题。

也可以移动,你可以重命名。重命名与OS.File.move相同,但是在同一目录中。

非技巧方式需要js-ctypes:

在Windows上,您可以执行此操作OS.File.open,如果失败,则会打开。如果成功,请确保.close(),因为其他人没有使用它。这不会对mac / * nix起作用,因为open可以打开任何内容。

在Mac / * nix上,您必须使用open,然后使用fcntl,然后通过js-ctypes close,就像我在此处所做的那样:https://github.com/Noitidart/Profilist/blob/219f225643828a000c60d01ea212505bb0817ff5/modules/workers/MainWorker.js#L1313

你可以在同一个函数中看到,在上面的块中,如果是Windows,我会OS.File.open。我的代码在这里有点复杂,因为我也获得了打开它的进程的pid

我在ostypes lib - https://github.com/Noitidart/ostypes中定义了所有这些内容 - 您可以导入并立即使用它。

答案 1 :(得分:0)

自己打开它。如果它可以打开,你可以做你想做的事情。如果没有,请要求操作员关闭并在确认关闭后重试