gpt4 book ai didi

javascript - 从扩展名访问文件有时会返回 NS_ERROR_FILE_IS_LOCKED

转载 作者:行者123 更新时间:2023-12-03 12:24:00 25 4
gpt4 key购买 nike

我们的扩展(Addon SDK)在文件夹 C:\scan 中查找新文件并将其发送到服务器。每隔一个扩展查找最新的文件创建时间并将其定义为最新。(比较新文件的创建时间和 1 秒前的文件创建时间。)文件从 Windows 7 上的 Brother 7050 扫描仪放入 C:\scan

但有时在 console.error 中我们会看到:

Exception 
message: "Component returned failure code: 0x8052000e (NS_ERROR_FILE_IS_LOCKED)
[nsIFileInputStream.init]",
result: 2152857614,
name: "NS_ERROR_FILE_IS_LOCKED"

我认为 Brother 7050 应用程序没有时间在我们的扩展程序开始读取文件之前解锁文件。

问:如何才能真正读取文件夹中的最新文件而不出现读文件锁定错误?

/*
adr- folder path
array2 - array for search
mode - search or not search in array2 (0-1)
*/
function getfilelist(adr,array2, mode)
{
filelist2=[];
filelist2[0]="";
filelist2[1]=0;
var file = new FileUtils.File(adr);
var enumerator = file.directoryEntries;
while (enumerator.hasMoreElements())
{
inner = enumerator.getNext().QueryInterface(Ci.nsIFile);
if (inner.isFile())
{
namearray=inner.leafName.split(".");
r=namearray[namearray.length-1];
if (r=="jpg" || r=="jpeg")
{
if (mode==0)
{
if (inner.lastModifiedTime>filelist2[1])
{
filelist2[0]=inner.leafName;
filelist2[1]=inner.lastModifiedTime;
}
}
else if (mode==1)
{
if (inner.lastModifiedTime>array2[1] && inner.isReadable()==true)
return inner.leafName;
}
}
}
}
if (mode==0)
{
return filelist2;
}
return false;
}

最佳答案

您看到 NS_ERROR_FILE_IS_LOCKED 的原因很可能是该文件仍在写入中,而您试图过早访问它。但是,某些其他软件也可能会立即锁定文件来检查它,例如your anti-virus .

无论哪种方式,都无法忽略锁。即使可以,您也可能会得到不完整的文件。您应该做的是注意该异常并记住您应该在下次运行时尝试读取该文件。大致如下:

var {Cr} = require("chrome");

var unaccessible = null;
setInterval(checknewfiles, 1000);

function checknewfiles()
{
var files = getfilelist(...);
if (unaccessible)
{
// Add any files that we failed to read before to the end of the list
files.push.apply(files, unaccessible);
unaccessible = null;
}
for (var file of files)
{
try
{
readfile(file);
}
except(e if e.result == Cr.NS_ERROR_FILE_IS_LOCKED)
{
if (!unaccessible)
unaccessible = [];
unaccessible.push(file);
}
}
}

供引用:

关于javascript - 从扩展名访问文件有时会返回 NS_ERROR_FILE_IS_LOCKED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24307208/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com