На этом шаге рассмотрим возможность просмотра информации о файле с помощью класса 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.