Запись в файл в расширении Mozilla Firefox - странная ошибка

Я пытаюсь разработать расширение для Firefox. Просто для начала я пытаюсь записать в файл, но получаю очень странное и необъяснимое поведение.

этот код работает:

var file = showFilePicker(window,"saveTestCaseAs",
                                  Components.interfaces.nsIFilePicker.modeSave,
                                  Format.TEST_CASE_DIRECTORY_PREF,
                                 function(fp) {return fp.file;});

var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
foStream.init(file1, 0x02 | 0x08 | 0x20, 438, 0);

var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
                    createInstance(Components.interfaces.nsIConverterOutputStream);

converter.init(foStream, "UTF-8", 0, 0);

converter.writeString("test string");

converter.close();

а этот нет:

var file1 = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile);
file1.initWithPath("C:\Documents and Settings\XPMUser\Desktop\test.t"); 

var foStream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream);
// use 0x02 | 0x10 to open file for appending.
foStream.init(file1, 0x02 | 0x08 | 0x20, 438, 0);
var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].
                createInstance(Components.interfaces.nsIConverterOutputStream);
converter.init(foStream, "UTF-8", 0, 0);
converter.writeString("test string");
converter.close(); // this closes foStream

Сообщение об ошибке: Ошибка: Компонент вернул код ошибки: 0x80004005 (NS_ERROR_FAILURE) [nsIFileOutputStream.init]. Однако это сообщение об ошибке ничего не значит, поскольку это самая общая ошибка из всех. это очень странно, потому что единственная разница заключается в том, как инициализируется файловый объект, но в обоих случаях параметры инициализации (имя файла, prems и т. д.) и тип возвращаемого объекта абсолютно одинаковы.

Буду очень признателен, если кто-нибудь подскажет по этому поводу.


person munch    schedule 27.04.2011    source источник
comment
Обратите внимание, что вам действительно не следует выполнять синхронный дисковый ввод-вывод в вашем дополнении. developer.mozilla.org/en/Code_snippets/ показывает вам как это сделать более эффективно.   -  person sdwilsh    schedule 27.04.2011


Ответы (1)


@sdwilsh очень хорошо заметил выше. К сожалению, проблема гораздо проще и даже глупее. И это при одиночных обратных косых чертах и ​​слишком общих сообщениях об ошибках. Путь, который я предоставил, имеет одиночную обратную косую черту, которая интерпретируется как escape-символы, и на самом деле строка больше не является допустимым путем. Замена '\' на '\' решает эту проблему. Так что это очень простая проблема, но нужно действительно уделять больше внимания деталям.

person munch    schedule 28.04.2011