Leyendo la entrada de aNieto2K sobre logs en Javascript, me he acordado de que hace tiempo que quiero comentar cómo escribir en ficheros mediante XUL en extensiones para Firefox.
Aunque la principal función puede ser la escritura de opciones o ficheros de configuración o guardar datos, el motivo por el que yo lo busqué era para hacerme unos logs que me faciliten el trabajo del desarrollo de una extensión para Firefox (de aquà la asociación con el post de aNieto2K).
var savefile = "c:\\displaynotes.log.txt";
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
} catch (e) {
alert("Permission to save file was denied.");
}
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath( savefile );
if ( file.exists() == false ) {
alert( "Creating file... " );
file.create( Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 420 );
}
var outputStream = Components.classes["@mozilla.org/network/file-output-stream;1"]
.createInstance( Components.interfaces.nsIFileOutputStream );
// Suponemos que existe una variable con el texto llamada content
outputStream.init( file, 0x04 | 0x10, 420, 0 );
var result = outputStream.write( content, content.length );
outputStream.close();
En el init del outputStream nos encontramos con una serie de flags para abrir el fichero que se usan como máscara. Estos flags tienen los siguientes posibles valores:
RDONLY 0x01
PR_WRONLY 0x02
PR_RDWR 0x04
PR_CREATE_FILE 0x08
PR_APPEND 0x10
PR_TRUNCATE 0x20
PR_SYNC 0x40
PR_EXCL 0x80
A parte, existe un parámetro para indicar el modo del fichero, válido únicamente para entornos Unix:
00400 Read by owner.
00200 Write by owner.
00100 Execute (search if a directory) by owner.
00040 Read by group.
00020 Write by group.
00010 Execute by group.
00004 Read by others.
00002 Write by others
00001 Execute by others.
No recuerdo de dónde saqué esta información, por lo que no os puedo poner la referencia.