Работа с каталогами QDir

Автор: | 29 июля, 2019

Класс 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

Сортировка по типу файла (расширение)