使用OS.File来测试路径是否被锁定?

时间:2014-07-17 01:13:40

标签: firefox-addon

使用OS.File,我可以打开一个锁定文件:

let options = {
  winShare: 0 // Exclusive lock on Windows
};
if (OS.Constants.libc.O_EXLOCK) {
  // Exclusive lock on *nix
  options.unixFlags = OS.Constants.libc.O_EXLOCK;
}
let file = yield OS.File.open(..., options);

是否可以测试路径是否已被锁定。我正在寻找nsiToolkitProfile.lockProfile

的替代方案

这是复制粘贴到暂存器代码。顶部块使用nsitoolkitprofile来测试是否锁定。它工作正常。第二部分使用OS.File.open,它总是抛出错误。

Cu.import('resource://gre/modules/osfile.jsm');
Cu.import('resource://gre/modules/FileUtils.jsm');
var tps = Cc['@mozilla.org/toolkit/profile-service;1'].createInstance(Ci.nsIToolkitProfileService); //toolkitProfileService

var folderOfProfile = 'k46wtieb.clean'; //folder names of relative profiles found here: %APPDATA%\Mozilla\Firefox\Profiles

var rootPathDefault = FileUtils.getFile('DefProfRt', []).path;
var localPathDefault = FileUtils.getFile('DefProfLRt', []).path;

var aDirect = new FileUtils.File(OS.Path.join(rootPathDefault, folderOfProfile));
var aTemp = new FileUtils.File(OS.Path.join(localPathDefault, folderOfProfile));
try {
    var locker = tps.lockProfilePath(aDirect, aTemp)
    Services.ww.activeWindow.alert('NOT open');
    locker.unlock();
} catch (ex) {
    if (ex.result == Cr.NS_ERROR_FILE_ACCESS_DENIED) {
        Services.ww.activeWindow.alert('its in use');
    } else {
        throw ex;
    }
}

var promise = OS.File.open(aDirect.path)
promise.then(
    function(aVal) {
        Services.ww.activeWindow.alert('promise success, aVal = ' + aVal);
        aVal.close();
    },
    function(aReason) {
        Services.ww.activeWindow.alert('promise rejected, aReason = ' + uneval(aReason));
    }
)

每次aReason.becauseAccessDenied始终拒绝承诺:(

1 个答案:

答案 0 :(得分:1)

只是尝试打开它...如果由于权限而无法使用,那么该文件可能已锁定在其他位置。