hi all im trying to modify my overwrite function to appned to the file, can asyncCopy do this?
Code: Select all
function overwrite(nsiFile, data, callback) {
//data is data you want to write to file
//if file doesnt exist it is created
var ostream = FileUtils.openSafeFileOutputStream(nsiFile)
var converter = Cc['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Ci.nsIScriptableUnicodeConverter);
converter.charset = 'UTF-8';
var istream = converter.convertToInputStream(data);
// The last argument (the callback) is optional.
NetUtil.asyncCopy(istream, ostream, function (status) {
if (!Components.isSuccessCode(status)) {
// Handle error!
Cu.reportError('error on write isSuccessCode = ' + status);
return;
}
// Data has been written to the file.
callback(status)
});
}
my solution right now is to combine readFile and overwriteFile like this:
Code: Select all
Cu.import("resource://gre/modules/FileUtils.jsm");
Cu.import("resource://gre/modules/NetUtil.jsm");
//example
var logFile = FileUtils.getFile('Desk', ['rawr.txt']); //this gets file on desktop named 'rawr.txt'
appendFile(logFile, 'trala trala trala', function (status) {
if (!Components.isSuccessCode(status)) {
alert('appendFile failed');
} else {
alert('appendFiled SUCCESFUL');
}
});
//end example
function appendFile(nsiFile, data, callback) {
//callback is fed arg1 of status
var afterRead = function(dataReadFromFile, status) {
if (dataReadFromFile === null) {
//file did not exist before so in overwrite it will make the file
overwriteFile(nsiFile, data, afterWrite);
} else {
overwriteFile(nsiFile, dataReadFromFile + '\n' + data, afterWrite);
}
}
var afterWrite = function (status) {
if (callback) {
callback(status);
}
}
readFile(nsiFile, afterRead);
}
function overwriteFile(nsiFile, data, callback) {
//data is data you want to write to file
//if file doesnt exist it is created
var ostream = FileUtils.openSafeFileOutputStream(nsiFile)
var converter = Cc['@mozilla.org/intl/scriptableunicodeconverter'].createInstance(Ci.nsIScriptableUnicodeConverter);
converter.charset = 'UTF-8';
var istream = converter.convertToInputStream(data);
// The last argument (the callback) is optional.
NetUtil.asyncCopy(istream, ostream, function (status) {
if (!Components.isSuccessCode(status)) {
// Handle error!
Cu.reportError('error on write isSuccessCode = ' + status);
callback(status);
return;
}
// Data has been written to the file.
callback(status)
});
}
function readFile(file, callback) {
//you must pass a callback like function(dataReadFromFile, status) { }
//then within the callback you can work with the contents of the file, it is held in dataReadFromFile
//callback gets passed the data as string
NetUtil.asyncFetch(file, function (inputStream, status) {
//this function is callback that runs on completion of data reading
if (!Components.isSuccessCode(status)) {
Cu.reportError('error on file read isSuccessCode = ' + status);
callback(null, status)
return;
}
var data = NetUtil.readInputStreamToString(inputStream, inputStream.available());
callback(data, status);
});
}