Информация о файлах. Класс QFileInfo


Задача этого класса состоит в предоставлении информации о свойствах файла, например: имя, размер, время последнего изменения, права доступа и т. д. Объект класса QFileInfo создается передачей в его конструктор пути к файлу, но можно передавать и объекты класса QFile.

Файл или каталог?

Иногда необходимо убедиться, что исследуемый объект является каталогом, а не файлом и наоборот. Для этой цели существуют методы isFile() и isDir().

В том случае, если объект является файлом, метод isFile() возвращает значение булевого типа true, иначе — false. Если объект является директорией, то метод isDir() возвращает true, иначе — false. Кроме этих методов, класс QFileInfo содержит метод isSymLink(), возвращающий true, если объект является символьной ссылкой (symbolic link или shortcut в ОС Windows).

Символьные ссылки применяются в UNIX для обеспечения связи с файлами или каталогами. Создаются они при помощи команды "ln" с ключом "-s".

Путь и имя файла в Qt

Чтобы получить путь к файлу, нужно воспользоваться методом absoluteFilePath(). Для получения относительного пути к файлу следует использовать метод filePath(). Для получения имени файла нужно вызвать метод fileName(), который возвращает имя файла вместе с его расширением. Если нужно только имя файла, то следует вызвать метод baseName(). Для получения расширения используется метод completeSuffix().

Информация о дате и времени файла в Qt

Иногда нужно узнать время создания файла, время его последнего изменения или чтения. Для этого класс QFileInfo предоставляет методы created(), lastModified() и lastRead() соответственно. Эти методы возвращают объекты класса QDateTime, которые можно преобразовать в строку методом toString(). Например:


//Дата и время создания файла
fileInfo.created().toString();

//Дата и время последнего изменения файла
fileInfo.lastModified().toString();

//Дата и время последнего чтения файла
fileInfo.lastRead().toString();

Получение атрибутов файла в Qt

Атрибуты файла дают информацию о том, какие операции можно проводить с файлом.

Для их получения в классе QFileInfо существуют следующие методы:

isReadable() —возвращает true, если из указанного файла можно читать информацию;

isWriteable() —возвращает true, если в указанный файл можно записывать информацию;

isHidden() — возвращает true, если указанный файл является скрытым;

isExecutable() —возвращает true, если указанный файл можно исполнять. В ОС UNIX это определяется не на основании расширения файла, как привыкли считать программисты в DOS и ОС Windows, а посредством свойств самого файла.

Определение размера файла в Qt

Метод size() класса QFileInf о возвращает размер файла в байтах. Размер файлов редко отображается в байтах, чаще используются специальные буквенные обозначения, сообщающие об его размере. Например, для килобайта — это буква К, для мегабайта — М, для гигабайта — G, а для терабайта — Т. Следующая функция позволяет сопровождать буквенными обозначениями размеры, лежащие даже в терабайтном диапазоне (вполне возможно, что через несколько лет это будет обычный размер файла):


QString fileSize(qint64 nSize)
{
    qint64 i = 0;
    for (; nSize > 1023; nSize /= 1024, ++i) { }
    return QString().setNum(nSize) + "BKMGT"[i];
}

Читать далее: Потоки ввода/вывода. Класс QTextStream