日期:2014年10月13日星期一14:22:35 GMT-0500(中央标准时间) 完整消息:在文件log.txt上打开操作期间赢得错误5(访问被拒绝。)
我在Mozilla的附加SDK教程之后创建了一个附加组件,cfx test
和cfx run
都完美无缺。但是,安装附加组件后,OS.File.open不起作用。以下是相关代码:
var testLogArray = "", testLogFile = "qpasslog.txt";
const {TextEncoder, TextDecoder, OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
Cu.import("resource://gre/modules/Task.jsm");
var testLogEncoder = new TextEncoder();
function addToLogfile(logData) {
console.log("main-js: Logging "+logData);
var dataToWrite = testLogEncoder.encode(logData+"\r\n");
Task.spawn(function() {
let exists = yield OS.File.exists(testLogFile);
let pfh = yield OS.File.open(testLogFile, exists ? {read:true, write: true, existing: true, append: true} : {read: true, write: true, create: true, append: false });
let text = yield pfh.read();
yield pfh.write(dataToWrite);
yield pfh.close();
});
}
let currentdate = new Date();
let dateTime = currentdate.getDate() + "/"
+ (currentdate.getMonth()+1) + "/"
+ currentdate.getFullYear() + " @ "
+ currentdate.getHours() + ":"
+ currentdate.getMinutes() + ":"
+ currentdate.getSeconds();
addToLogfile("\r\nLog for "+dateTime);
然后我在我的程序中多次调用addToLogfile
,例如。
addToLogfile("main-js: Simple storage is over quota. Removing "+ss.storage.emails.pop());
这一切都在cfx run
期间完美运作。它会记录日期/时间,然后记录其他消息。但是现在我用cfx xpi
和ctrl + o(xpi文件)安装了程序,并且:
当我关闭Firefox时,我会收到日期/时间消息,例如。
Log for 13/10/2014 @ 13:3:28
我没有收到任何其他消息,即使代码应该始终执行。
浏览器控制台显示以下消息:
Date: Mon Oct 13 2014 14:25:46 GMT-0500 (Central Standard Time)
Full Message: Win error 5 during operation open on file qpasslog.txt (Access is denied.)
那么为什么有时会出现拒绝访问错误?如何在不收到错误的情况下写入文件?
答案 0 :(得分:1)
由于没有正确的日志文件路径。以下链接中的答案修复了它。 Mozilla Add-on SDK - OS.File.read (The system cannot find the file specified.)