Есть функция, внутри которой код:

Выделить код

Код:

var mLocalFile = Components.classes["@mozilla.org/file/local;1"]
                         .createInstance(Components.interfaces.nsILocalFile);
    mLocalFile.initWithPath(filepath);
    if(!mLocalFile.exists())
        return "???";

и вызов функции:

Выделить код

Код:

<toolbarbutton  id="helloButton" label="&helloworld;"
              oncommand="alert(read('D:\AXE\labuda\firefox\1.txt' ));"/>

в алерте всегда вижу '???'

D:\AXE\labuda\firefox - это путь к профилю. Пробовал указывать путь к файлу с прямыми слешами - не помогает.

axe
https://developer.mozilla.org/en/Code_s … 2_files%29

Note: The path passed to initWithPath() should be in "native" form (for example "C:\\Windows"). If you need to use file:// URIs as initializers, see discussion of nsIIOService below.

И вот это учтите:

Note: initWithPath() / initWithFile() methods don't throw an exception if the specified file does not exist. An exception is thrown when methods that require the file existence are called, for example isDirectory(), moveTo(), and so on.

Не сразу заметил:

axe пишет

D:\AXE\labuda\firefox - это путь к профилю

В этом случае корректную ссылку на файл можно получить так:

Выделить код

Код:

Cu.import("resource://gre/modules/Services.jsm");
................
let file=Services.dirsvc.get("ProfD", Ci.nsILocalFile);// путь к папке профиля
file.append("1.txt"); // файл, лежащий непосредственно в папке профиля
if(!file.exists())
    return "???";
.....
okkamas_knife пишет

попробуй двойные D:\\AXE\\labuda\\firefox\\1.txt

действительно, с двойными слешами сработало! не ожидал, вроде бы по всякому пути писать пробовал - и не работало. на всякий случай, скопирую сюда код функции целиком (вдруг у кого-то ещё будут проблемы с чтением файлов):

Выделить код

Код:

function read(path) {
     try {
          netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
     } catch (e) {
          alert("Permission to read file was denied.");
     }
     var file = Components.classes["@mozilla.org/file/local;1"]
          .createInstance(Components.interfaces.nsILocalFile);
     file.initWithPath( path );
     if ( file.exists() == false ) {
          alert("File does not exist");
     }
     var is = Components.classes["@mozilla.org/network/file-input-stream;1"]
          .createInstance( Components.interfaces.nsIFileInputStream );
     is.init( file,0x01, 00004, null);
     var sis = Components.classes["@mozilla.org/scriptableinputstream;1"]
          .createInstance( Components.interfaces.nsIScriptableInputStream );
     sis.init( is );
     return sis.read( sis.available() );
}
alert(read("D:\\1.txt"));

Спасибо за помощь!