Класс QDir обеспечивает доступ к каталогов и их содержимому. Платформонезависимый класс использует «/» в качестве универсального разделителя каталогов так же, как «/» используется в качестве разделителя пути в URL. QDir может указывать на файл, используя относительный или абсолютный путь.
Для примера:
// Абсолютные путь QDir("/home/user/Documents") QDir("C:/Documents and Settings") // Относительный путь QDir("images/1.png") QDir("test/1.png")
Для определения пути можно использовать методы isRelative() или isAbsolute(). Для преобразования из относительный в абсолютный метод makeAbsolute().
Путь к каталогу можно получить с помощью функции path(), а новый путь — с помощью функции setPath(). Абсолютный путь к каталогу определяется путем вызова absolutePath(). Имя каталога с помощью функции dirName().
Путь к каталогу также можно изменить с помощью функций cd() и cdUp(), которые работают подобно знакомым командам оболочки. Каталоги можно создавать с помощью mkdir(), переименовывать с помощью rename() и удалять с помощью rmdir(). Для проверки наличия каталога метод exist(). Свойства с помощью isReadable(), isAbsolute(), isRelative() и isRoot().
Для определения каталога из которого было запущенно приложения следует использовать QApplication::applicationDirPath() или QApplication::applicationFilePath().
Фрагменты кода для наглядной демонстрации работы:
// Проверка наличии файла #include <QDir> QDir dir("example.txt"); if (!dir.exists()) qWarning("Не найдено"); // Получение всех файлов в текущем каталоге #include <QDir> QDir dir; dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks); dir.setSorting(QDir::Size | QDir::Reversed); QFileInfoList list = dir.entryInfoList(); for (int i = 0; i < list.count(); i++) { QFileInfo fileInfo = list.at(i); qDebug() << QString("%1 %2 %3 %4").arg(fileInfo.size(), 10).arg(fileInfo.fileName()).arg(fileInfo.absoluteFilePath()).arg(fileInfo.suffix()); }
В результате будет выведено:
- Размер файла в байтах
- Имя файла
- Полный путь
- Расширение файла
Рассмотрим методы setFilter() и setSorting()
Метод setFilter() предназначен для фильтрации доступных файлов.
QDir и setFilter()
Значение фильтра задается путем объединения значений из следующего списка с использованием побитового оператора ИЛИ:
QDir :: Dirs
Список каталогов
QDir :: AllDirs
Список всех каталогов; не применять фильтры к именам каталогов
QDir :: Files
Список файлов
QDir :: Drives
Список дисков (игнорируется в Unix)
QDir :: NoSymLinks
Не перечислять символические ссылки (игнорируется операционными системами, которые не поддерживают символические ссылки)
QDir :: NoDotAndDotDot
Не перечислять специальные записи «.» а также «..»
QDir :: NoDot
Не перечислять специальную запись «.»
QDir :: NoDotDot
Не перечислять специальную запись «..»
QDir :: AllEntries
Список каталогов, файлов, дисков и символических ссылок
QDir :: Readable
Список файлов, для которых у приложения есть доступ для чтения. Читаемое значение должно быть объединено с Dirs или Files
QDir :: Writable
Список файлов, для которых у приложения есть доступ для записи. Значение Writable должно быть объединено с Dirs или Files
QDir :: Executable
Список файлов, к которым у приложения есть доступ для выполнения. Исполняемое значение должно быть объединено с Dirs или Files
QDir :: Hidden
Список скрытых файлов (в Unix, файлы, начинающиеся с «.»)
QDir :: System
Список системных файлов (в Unix включены файлы FIFO, сокеты и файлы устройств; в Windows файлы .lnk)
QDir :: CaseSensitive
Фильтр должен быть чувствительным к регистру
Созданный по умолчанию QDir не будет отфильтровывать файлы на основе их разрешений, поэтому entryList() и entryInfoList() будут возвращать все файлы, которые доступны для чтения, записи, выполнения или любой комбинации этих первых трех фильтров.
QDir и setSorting()
Метод setSorting() задает параметры сортировки.
Данный метод поддерживает одну сортировку по следующим параметрам:
QDir::Name
Сортировать по имени
QDir::Time
Сортировать по времени (время модификации)
QDir::Size
Сортировать по размеру файла
QDir::Type
Сортировка по типу файла (расширение)