Интернет, компьютеры, софт и прочий Hi-Tech | ||
Избранные докиМетки (все метки)hi tech, internet, it, интернет, информационные технологии, ит, по, программное обеспечение, сайт, софт
Подписаться через RSS2Email.ru
Дополнительнооптимизация, сайт, мониторы, движок, Битрикс, хостинг, сайты, мобильные, электроника, видеокарта |
Ввод и вывод из файла средствами XPCOMСодержание
Навигация с помощью 'nsIFile'Доступ к файлу в данной директорииПусть переменная 'file' типа ' ЗАМЕЧАНИЕ: не рекоммендуется использовать код типа следующего:dir.path+"\\"+"myfile.txt"так как он не является кроссплатформенным. Вместо него можно использовать следующий:((path.search(/\\/) != -1) ? path + "\\" : path + "/") + "myfile.txt";но Перебор файлов из данной директорииСледующий код создает массив объектов ' // 'file' является данной директорией ('nsIFile')
var entries = file.directoryEntries;
var array = [];
while(entries.hasMoreElements())
{
var entry = entries.getNext();
entry.QueryInterface(Components.interfaces.nsIFile);
array.push(entry);
}
Чтение из файлаПростое// 'file' должен являться 'nsIFile'
var data = "";
var fstream = Components.classes["@mozilla.org/network/file-input-stream;1"].
createInstance(Components.interfaces.nsIFileInputStream);
var cstream = Components.classes["@mozilla.org/intl/converter-input-stream;1"].
createInstance(Components.interfaces.nsIConverterInputStream);
fstream.init(file, -1, 0, 0);
cstream.init(fstream, "UTF-8", 0, 0); // если хотите, вы можете использовать
// другую кодировку
let (str = {}) {
let read = 0;
do {
// читаете столько, сколько нужно и записываете вывод в 'str.value'
read = cstream.readString(0xffffffff, str);
data += str.value;
} while (read != 0);
}
cstream.close(); // this closes fstream
alert(data);
ПострочноЗАМЕЧАНИЕ: приведенный пример кода не работает с текстами, содержащими не-ASCII символы. В статье Чтение текстовых данных можно прочесть подробности о том, как читать тексты в других символьных наборах. // открываете поток ввода из файла
var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].
createInstance(Components.interfaces.nsIFileInputStream);
istream.init(file, 0x01, 0444, 0);
istream.QueryInterface(Components.interfaces.nsILineInputStream);
// читаете строки в массив
var line = {}, lines = [], hasmore;
do {
hasmore = istream.readLine(line);
lines.push(line.value);
} while(hasmore);
istream.close();
// делаете что-то с прочтенными данными
alert(lines);
АсинхронноЭтот код позволит вам читать файл без блокировки процесса пользовательского интерфейса. ЗАМЕЧАНИЕ: интерфейс 'nsIStreamLoader' был изменен в связи багом 233780. Так что теперь его метод 'init()' принимает только один параметр - слушатель. Следующий код показывает, как его вызывать корректно в зависимости от запущенной версии Gecko. var appInfo=Components.classes["@mozilla.org/xre/app-info;1"]
.getService(Components.interfaces.nsIXULAppInfo);
var isOnBranch = appInfo.platformVersion.indexOf("1.8") == 0;
var ios=Components.classes["@mozilla.org/network/io-service;1"]
.getService(Components.interfaces.nsIIOService);
var fileURI=ios.newFileURI(file);
var channel = ios.newChannelFromURI(fileURI);
var observer = {
onStreamComplete : function(aLoader, aContext, aStatus, aLength, aResult)
{
alert(aResult);
}
};
var sl = Components.classes["@mozilla.org/network/stream-loader;1"].
createInstance(Components.interfaces.nsIStreamLoader);
if (isOnBranch) {
sl.init(channel, observer, null);
} else {
sl.init(observer);
channel.asyncOpen(sl, channel);
}
Бинарный файлДля определенности, получим данные из PNG-файла: var ios = Components.classes["@mozilla.org/network/io-service;1"].
getService(Components.interfaces.nsIIOService);
var url = ios.newURI(aFileURL, null, null);
if (!url || !url.schemeIs("file")) throw "Неверный URL файла.";
var pngFile = url.QueryInterface(Components.interfaces.nsIFileURL).file;
var istream = Components.classes["@mozilla.org/network/file-input-stream;1"].
createInstance(Components.interfaces.nsIFileInputStream);
istream.init(pngFile, -1, -1, false);
var bstream = Components.classes["@mozilla.org/binaryinputstream;1"].
createInstance(Components.interfaces.nsIBinaryInputStream);
bstream.setInputStream(istream);
var bytes = bstream.readBytes(bstream.available());
Назад: Создание папок Перевод с английского: Д.Скоробогатов, 24.09.2010. Предыдущие публикации:
Последнее редактирование: 2010-10-15 10:55:45 Метки материала: com, программа, файл, mozilla, скрипты, браузер, программы для компьютера, программирование, javascript, ит, разработка программ, файловая система, xpcom, xulrunner, api, по, программное обеспечение, программы, софт, информационные технологии Оставьте, пожалуйста, свой комментарий к публикации |
|
© 2007-2012, Дмитрий Скоробогатов.
Разрешается воспроизводить, распространять и/или изменять материалы сайта
в соответствии с условиями GNU Free Documentation License,
версии 1.2 или любой более поздней версии, опубликованной FSF,
если только иное не указано в самих материалах.