Запись в файл в расширении Mozilla Firefox - странная ошибка - PullRequest
1 голос
/ 27 апреля 2011

Я пытаюсь разработать расширение для 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 и т. д.) и тип возвращаемого объекта в точности совпадают.

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

1 Ответ

1 голос
/ 28 апреля 2011

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

...