Say, I have a file that is 500 bytes in size on my local hard drive and I want to read first 100 bytes from it without loading the whole file into memory. How to accomplish that in JavaScript with the help of UniversalXPConnect
? In Firefox only, of course.
Asked
Active
Viewed 792 times
1

Brock Adams
- 90,639
- 22
- 233
- 295

Sam
- 11
- 1
-
Just verifying that you know this is impossible unless you are writing a Firefox extension? – Brock Adams Jul 09 '11 at 22:45
-
@Brock Adams: UniversalXPConnect gives one full access - same as a Firefox extension. – Wladimir Palant Jul 11 '11 at 06:47
-
@Wladimir, UniversalXPConnect only runs, with the necessary permissions, in chrome JS. That is it has to be an add-on or plugin. IE, an extension. – Brock Adams Jul 11 '11 at 07:34
-
@Brock: Or an intranet website, given suitable browser configuration - it needs to call `enablePrivilege()` then. – Wladimir Palant Jul 11 '11 at 08:55
1 Answers
0
Assuming that you want to read ASCII text data (no character set conversion):
var file = Components.classes["@mozilla.org/file/local;1"]
.createInstance(Components.interfaces.nsILocalFile);
file.initWithPath("/foo/bar");
var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"]
.createInstance(Components.interfaces.nsIFileInputStream);
fstream.init(file, -1, 0, 0);
var sstream = Components.classes["@mozilla.org/scriptableinputstream;1"]
.createInstance(Components.interfaces.nsIScriptableInputStream);
sstream.init(fstream);
var data = sstream.read(100);
sstream.close();
Further information: https://developer.mozilla.org/en/Code_snippets/File_I%2F%2FO

Wladimir Palant
- 56,865
- 12
- 98
- 126