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