Интернет, компьютеры, софт и прочий Hi-Tech

Подписаться через RSS2Email.ru

Ввод и вывод из файла средствами XPCOM

Начало

Содержание

  1. Доступные библиотеки
  2. Создание объекта 'nsIFile' ("открытие" файлов)
  3. Доступ к специальным файлам
    1. Доступ к домашней директории пользователя
    2. Доступ к папке с вашим расширением
    3. Перебор дисков в Windows
  4. Создание папок
  5. Создание временных файлов
  6. Пользовательский ввод с помощью 'nsIFilePicker'
  7. 'nsIFile' и строковые пути
  8. Сохранение 'nsILocalFile' в преференциях
    1. Абсолютный путь ('nsILocalFile')
    2. Относительный путь ('nsIRelativeFilePref')
  9. Навигация с помощью 'nsIFile'
    1. Доступ к файлу в данной директории
    2. Перебор файлов из данной директории
  10. Чтение из файла
    1. Простое
    2. Построчно
    3. Асинхронно
    4. Бинарный файл
  11. Запись в файл
    1. Запись бинарного файла
    2. Копирование потока в файл
  12. Дополнительно

Создание папок

Для создания папки используйте 'nsIFile.create()':

var file = Components.classes["@mozilla.org/file/directory_service;1"].
                     getService(Components.interfaces.nsIProperties).
                     get("ProfD", Components.interfaces.nsIFile);
file.append("DIR");
if( !file.exists() || !file.isDirectory() ) {   // если не существует, создаем
   file.create(Components.interfaces.nsIFile.DIRECTORY_TYPE, 0777);
}

В приведенном примере создается папка с названием "DIR", вложенная в папку профайла. Дополнительную информацию можно найти в справке по 'nsIFile.create'.

Создание временных файлов

Для создания временного файла используйте 'nsIFile.createUnique()':

var file = Components.classes["@mozilla.org/file/directory_service;1"].
                     getService(Components.interfaces.nsIProperties).
                     get("TmpD", Components.interfaces.nsIFile);
file.append("suggestedName.tmp");
file.createUnique(Components.interfaces.nsIFile.NORMAL_FILE_TYPE, 0666);
// делаем все, что нужно с созданным файлом
alert(file.path);

Пользовательский ввод с помощью 'nsIFilePicker'

Для открытия стандартных диалогов открытия/сохранения может быть использован компонент выбора файла 'nsIFilePicker'. Он вызвращает выбранный пользователем файл в виде 'nsIFile'.

'nsIFile' и строковые пути

Вы можете использовать 'nsIFile.path' для получения платформозависимой строки пути, например - "C:\Windows\System32" или "/usr/share".

Для получения URL файла используйте 'nsIIOService.newFileURI()':

// файл как 'nsIFile'
var ios = Components.classes["@mozilla.org/network/io-service;1"].
                    getService(Components.interfaces.nsIIOService);
var URL = ios.newFileURI(file);
// URL как 'nsIURI'.
// Для получения строки вида "file://..." смотрите 'URL.spec'

Для получения 'nsIFile' из URL 'file://', используйте 'nsIFileURL':

// URL как 'nsIURI'.
// Смотрите 'nsIIOService::newURI' для получения строки из 'nsIURI'.
var file = URL.QueryInterface(Components.interfaces.nsIFileURL).file;
// теперь файл представлен как 'nsIFile'

Загружая с 'file://', 'http://', 'chrome://', 'resource://' и других прямых URL, используйте 'XMLHttpRequest' или 'nsIChannel' (пример).

Заметим также, что в большинстве случаев вам ненужно использовать 'nsIFile::path'. Везде, где это возможно, используйте непосредственно 'nsIFile'. В примерах ниже будет показано, как следует сохранять путь в пользовательских преференциях.

Сохранение 'nsILocalFile' в преференциях

Следующие два пункта демонстрируют правильный способ сохранения файлового пути в пользовательских преференциях (более подробно о преференциях в Mozilla):

Абсолютный путь ('nsILocalFile')

Для сохранения произвольного пути в пользовательских преференциях, используйте следующий код:

// 'file' должен быть 'nsILocalFile'
// 1. Записываем путь в 'prefs'
var prefs = Components.classes["@mozilla.org/preferences-service;1"].
                      getService(Components.interfaces.nsIPrefService).
                      getBranch("extensions.myext.");
prefs.setComplexValue("filename", Components.interfaces.nsILocalFile, file);

// 2. Читаем путь из 'prefs'
var file = prefs.getComplexValue("filename", Components.interfaces.nsILocalFile);

Относительный путь ('nsIRelativeFilePref')

Сохранение путей, относительных к какой-то определенной папке из перечисленных выше, продемонстрируем на примере путей, относительных к папке профайла. Для их сохранения используйте следующий код:

// 1. Записываем в 'prefs'
var relFile = Components.classes["@mozilla.org/pref-relativefile;1"].
                        createInstance(Components.interfaces.nsIRelativeFilePref);
relFile.relativeToKey = "ProfD"; // или любая другая из перечисленных выше строк
relFile.file = file;             // 'file' должен быть 'nsILocalFile'
prefs.setComplexValue("filename",
     Components.interfaces.nsIRelativeFilePref, relFile);

// 2. Читаем из 'prefs'
var value = prefs.getComplexValue("filename",
     Components.interfaces.nsIRelativeFilePref);
// 'value.file' является сохраненным 'file'.

Назад: Начало
Дальше: Навигация с помощью 'nsIFile'


Перевод с английского: Д.Скоробогатов, 24.09.2010.


Предыдущие публикации:

Биржа долевых инвестиций SIMEX.

Последнее редактирование: 2010-10-15 10:54:31

Метки материала: com, программа, файл, mozilla, скрипты, браузер, программы для компьютера, программирование, javascript, ит, разработка программ, файловая система, xpcom, xulrunner, api, по, программное обеспечение, программы, софт, информационные технологии

Оставьте, пожалуйста, свой комментарий к публикации

Представиться как     Антибот:
   

Просьба не постить мусор. Если вы хотите потестить xBB, воспользуйтесь кнопкой предварительного просмотра на панели инструментов xBBEditor-а.


© 2007-2017, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.