Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№131-08-2011 23:19:02

axe
Участник
 
Группа: Members
Зарегистрирован: 13-04-2007
Сообщений: 54
UA: Chrome 13.0
Веб-сайт

xul: прочитать содержимое локального файла

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

Выделить код

Код:

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 - это путь к профилю. Пробовал указывать путь к файлу с прямыми слешами - не помогает.

Отсутствует

 

№201-09-2011 03:05:04

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 7.0

Re: xul: прочитать содержимое локального файла

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.

Отсутствует

 

№301-09-2011 11:13:21

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 7.0

Re: xul: прочитать содержимое локального файла

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

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 "???";
.....

Отсутствует

 

№404-09-2011 21:35:27

axe
Участник
 
Группа: Members
Зарегистрирован: 13-04-2007
Сообщений: 54
UA: Chrome 13.0
Веб-сайт

Re: xul: прочитать содержимое локального файла

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"));

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

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]