Шаг 94.
Библиотека Qt.
Класс QFileInfo. Информация о файлах

    На этом шаге рассмотрим возможность просмотра информации о файле с помощью класса QFileInfo.

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

    Если объект является файлом, метод isFile() возвращает значение true, иначе — false. Если объект является каталогом, то метод isDir() возвращает значение true, иначе — false.

    Кроме этих методов, класс QFileInfo содержит метод isSymLink(), возвращающий значение true, если объект является символьной ссылкой (термин "symbolic link" применяется в UNIX, в ОС Windows принято название ярлык (shortcut)).

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

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

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

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

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

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

    Атрибуты файла дают информацию о том, какие операции можно проводить с файлом. Для их получения в классе QFileInfo существуют следующие методы:

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

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

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

    Наблюдение за файлами и каталогами

    Поскольку файлы и каталоги используются не только вашей программой, бывает очень полезно получать уведомления в случае их изменений. Например, вы написали файловый браузер и показываете содержимое текущего каталога. Но пользователь может воспользоваться другими программами и скопировать новые файлы в этот каталог, после чего ото-ражаемая информация перестанет отвечать действительности. Не имея специального механизма слежения за изменением текущего каталога, вы не сможете узнать о необходимости обновить его содержимое.

    На следующем шаге рассмотрим класс QFileSystemWatcher.




Предыдущий шаг Содержание Следующий шаг