В этом разделе перечислены свойства и методы объекта File
Объект File предназначен для доступа к файлам в контексте JavaScript
new File() Создать объект
// Создать объект
var file = new File();
var fname = file.tempPath() + '/tmpFile.json';
// открыть на запись (если файл существует, то он будет перезаписан)
if(file.open(fname, 'w'))
{
var objtoRec = {
date: new Date(),
int: new Date().valueOf(),
str: String(new Date()),
arr: [1,2,3,4,5,6],
bool: true
};
post.log('i', 'write to file: ' + jsext.stringify(objtoRec,0,1));
file.write(jsext.stringify(objtoRec,0,2)); // записать объект в файл
file.close(); // Закрыть
}
else
{
post.log('e', 'не смог открыть файл: ' + fname);
}
// открыть файл на чтение
if(file.exists(fname) && file.open(fname, 'r'))
{
try{
var obj = JSON.parse(file.readAllStr()); // прочитать и распарсить
file.remove();// Закрыть и удалить
file.close();
post.log('i', 'read from file: ' + jsext.stringify(obj,0,1));
}catch(e){
post.log('w','парсинг ' + fname + ' завершился ошибкой: ' + e.fileName + ':' + e.lineNumber + ' "' + e.message + '"');
}
}
else
{
post.log('e', 'не смог открыть файл: ' + fname);
}
file.deleteLater(); // пометить к удалению
file = ''; // затереть ссылку на объект (удалить ссылку на объект из контекста JS)
Пример использования:
// Создать объект var file = new File(); //свойство параметра чтение/запись: var size = file.size; // Чтение file.watcher = true; // Запись
String file.name Только чтение
Имя файла
var fname = file.tempPath() + '/tmpFile.json'; // открыть на запись (если файл существует, то он будет перезаписан) file.open(fname, 'r') var myFileName = file.name; // возвратит 'tmpFile.json'
String file.absoluteFilePath Только чтение
Полный путь файла
var fname = file.tempPath() + '/tmpFile.json'; file.open(fname, 'r') var myFileName = file.absoluteFilePath; // возвратит '/home/user/tmp/tmpFile.json'
int file.size Только чтение
Размер файла
var fname = file.tempPath() + '/tmpFile.json';
file.open(fname, 'r');
file.close(); // файл можно закрыть
post.log('size: ' + file.size); // возможность при закрытом файле взять его размер
String file.mode Только чтение
режим работы с файлом
file.open(fname, 'r+')
post.log('mode: ' + file.mode); // возвратит 'r+'
int file.pos Только чтение
положение курсора в файле
var fname = file.tempPath() + '/tmpFile.json';
file.open(fname, 'r');
file.seek(5); // установить курсор
post.log('pos: ' + file.pos); // возвратит 5 если размер более 5-ти байт
bool file.atEnd Только чтение
курсор достиг конца файла
var fname = file.tempPath() + '/tmpFile.json';
file.open(fname, 'r');
while(!file.atEnd)
{
post.log('i', file.readLine());
}
file.close()
bool file.watcher Только чтение
Разрешить слежение за файлом (при изменении будет эмитирован сигнал fileChanged(String fileName))
var file = new File();
var fname = file.tempPath() + '/tmpFile.json';
file.open(fname, 'a');
file.close();
var pos = file.size; // сохранить размер файла
file.watcher = true; // разрешить наблюдение за файлом
function changeFile(changeFileName){
// this - это переданный объект File - эквивалент sender() в Qt
post.log('i', new Date().valueOf() + ' файл изменен: ' + changeFileName);
file.open(changeFileName); // открыть только для чтения
file.seek(pos); // установить курсор
// Прочесть последние изменения
while(!file.atEnd) { post.log('i', file.readLine()); }
pos = file.pos; // сохранить размер файла
file.close();
}
// Присоединить функцию обработчик к сигналу fileChanged и передать объект в функцию changeFile
file.fileChanged.connect(file, changeFile);
//----------------------------------------
// теперь проверка работы watcher-а
;(function(){
var fileWr = new File();
with(new QTimer())
{
start(700);
timeout.connect(function writedFile(){ // функция периодически открывает файл и пишет в него
fileWr.open(fname, 'a');
var dt = new Date().valueOf();
post.log(dt + ' write file')
fileWr.write('' + dt + '\n'); // записать в файл
fileWr.flush();
fileWr.close(); // Закрыть
});
}
})();
void file.fileChanged(fileName);
генерируется объектом File при изменении файла
// подсоединить к сигналу fileChanged функцию обработчик
file.fileChanged.connect(function change(fname){
post.log('i', new Date().valueOf() + ' файл изменен: ' + fname);
});
// эквивалентно следующей конструкции
function change(fname){
post.log('i', new Date().valueOf() + ' файл изменен: ' + fname);
}
file.fileChanged.connect(change);
// удобно передавать объект в функцию в качестве this
// следующий код поясняет механизм передачи
function change(fname){
post.log('i', new Date().valueOf() + ' файл изменен: ' + fname);
}
file.fileChanged.connect(file, change);
bool file.open(String fname, String mode="r") Функция
Открыть файл
fname - полное имя файла или синонем "stuff@include/init.js"
mode - режимы работы в стиле unux:
void file.close() Процедура
Закрыть файл
void file.flush() Процедура
Сбросить файл на диск
bool file.isOpen() Функция
Проверить что файл открыт
bool file.rename(newName) Функция
Переименовать файл (файл должен существовать и быть открытым)
bool file.remove(String fname = '') Функция
Удалить файл (если fname == '', то файл должен существовать и быть открытым)
bool file.seek(int pos) Функция
Установить позицию в файле
int file.write(var) Функция
Записать в файл. Возвращает количество записанных байт
int file.writeConv(string, codecName) Функция
Записать в файл строку в кодировке codecName. Возвращает количество записанных байт
String file.readAllStr(codecName = '') Функция
Прочитать из файла все строки. Если указана кодировка, будет произведена конвертация
String file.readLine(codecName = '') Функция
Прочитать из файла одну строку. Если указана кодировка, будет произведена конвертация
ByteArray file.readByteArr(len = -1) Функция
Прочитать из файла в виде массива ByteArray
Внимание! Существует ограничение в размере одновременного считывания 4Мб
Чтобы обойти это, воспользуйтесь следующей конструкцией
var file = new File(); file.open(fName, 'r'); var ba = new ByteArray(file); // создается массив с содержимым файла file.close();
Array file.readArr(len = -1) Функция
Прочитать из файла в виде нативного массива
int file.readToObj(QObject, len = -1) Функция
Прочитать из файла в QObject (у объекта должен быть метод data(QByteArray*)
void file.clearWatcher() Процедура
Остановить слежение за файлом (равноценно file.watcher = false;)
bool file.exists(fname) Функция
Проверить наличие файла или директории
bool file.isFile(fname) Функция
Проверить наличие файла
bool file.isDir(fname) Функция
Проверить наличие директории
String file.suffix(fname) Функция
Взять расширение файла
bool file.mkdir(dName) Функция
Создать директорию
bool file.rmdir(dName) Функция
Удалить директорию
bool file.mkpath(dName) Функция
Создать путь директорий
bool file.rmpath(dName) Функция
Удалить путь директорий
String file.separator() Функция
Разделитель директорий. В unix вернет / В Windows вернет \
String file.currentPath() Функция
Текущий каталог приложения
String file.homePath() Функция
Домашний каталог пользователя
String file.rootPath() Функция
Вернет корень файловой системы. В unix вернет / В Windows вернет C:/
String file.tempPath() Функция
Вернет временный каталог
String file.genTempFileName(String ext) Функция
Сгенерирует уникальное имя файла во временном каталоге