Правя разширение за firefox и искам моето разширение да отвори файл като "file:///home/blahblah/foo.txt" и след това да постави съдържанието на този файл в текстовата област. Лесно е с файлове "http://", но не мога да направя това с "file://"
как да създадете обект nsIFile с помощта на URI
comment
Искате да кажете, че имате файл: URI, от който искате да заредите, и имате нужда от обект nsIFile за него?
- person sdwilsh   schedule 18.08.2009
Отговори (2)
когато работите с локални файлове, трябва наистина да ги "заредите":
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("/home/blahblah/foo.txt");
if ( file.exists() == false ) {
dup.value = “File does not exist”;
}
var istream = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance(Components.interfaces.nsIFileInputStream);
istream.init(file, 0x01, 4, null);
var fileScriptableIO = Components.classes["@mozilla.org/scriptableinputstream;1"].createInstance(Components.interfaces.nsIScriptableInputStream);
fileScriptableIO.init(istream);
// parse the xml into our internal document
istream.QueryInterface(Components.interfaces.nsILineInputStream);
var fileContent = "";
var csize = 0;
while ((csize = fileScriptableIO.available()) != 0)
{
fileContent += fileScriptableIO.read( csize );
}
fileScriptableIO.close();
istream.close();
fileContent съдържа съдържанието като низ
person
Niko
schedule
17.08.2009
Трябва да се отбележи, че това не обработва не-ASCII знаци. Има и по-прост начин, документиран тук: developer .mozilla.org/index.php?title=en/Code_snippets/
- person sdwilsh; 18.08.2009
Ако имате URI низ за файла (вместо локалния път или nsIFile обект), тогава можете също да използвате XMLHttpRequest, за да прочетете съдържанието на файла.
person
Neil
schedule
01.10.2009