Работа с файловой системой в Qt C++: Класс QDir

Автор: | 7 июня, 2025

QDir — это удобный класс из библиотеки Qt, предназначенный для управления каталогами и получения информации о файлах. Он позволяет работать с путями, создавать, удалять и фильтровать файлы и папки, а также получать списки содержимого.

Основные возможности QDir

  • Получение и изменение текущего каталога
  • Перебор файлов и папок
  • Фильтрация содержимого по маске, атрибутам и флагам
  • Создание и удаление каталогов
  • Построение относительных и абсолютных путей

Подключение QDir

#include <QDir>
#include <QDebug>

Получение текущего каталога с помощью QDir

QDir currentDir;
qDebug() << "Текущий путь:" << currentDir.absolutePath();

Изменение текущего каталога с помощью QDir

QDir dir;
if (dir.cd("Documents")) {
    qDebug() << "Перешли в каталог:" << dir.absolutePath();
} else {
    qDebug() << "Не удалось перейти в папку 'Documents'";
}

Получение списка файлов с помощью QDir

QDir dir("/home/user/Documents");
QStringList files = dir.entryList(QDir::Files);
for (const QString &file : files) {
    qDebug() << "Файл:" << file;
}

Получение только папок с помощью QDir

QDir dir("/home/user");
QStringList folders = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
for (const QString &folder : folders) {
    qDebug() << "Папка:" << folder;
}

Фильтрация по расширению с помощью QDir

QDir dir("/home/user/images");
QStringList filters;
filters << "*.jpg" << "*.png";

dir.setNameFilters(filters);
QStringList images = dir.entryList(QDir::Files);
for (const QString &img : images) {
    qDebug() << "Изображение:" << img;
}

Создание новой папки с помощью QDir

QDir dir("/home/user");
if (dir.mkdir("NewFolder")) {
    qDebug() << "Папка создана.";
} else {
    qDebug() << "Не удалось создать папку.";
}

Удаление папки с помощью QDir

QDir dir("/home/user/NewFolder");
if (dir.removeRecursively()) {
    qDebug() << "Папка удалена.";
} else {
    qDebug() << "Ошибка при удалении.";}

Проверка существования файла или папки с помощью QDir

QDir dir("/home/user/Documents");
if (dir.exists()) {
    qDebug() << "Каталог существует.";
} else {
    qDebug() << "Каталог не найден.";
}

Построение абсолютного и относительного пути с помощью QDir

QDir dir("/home/user");
QString absolutePath = dir.absoluteFilePath("Documents/file.txt");
QString relativePath = dir.relativeFilePath("/home/user/Documents/file.txt");

qDebug() << "Абсолютный путь:" << absolutePath;
qDebug() << "Относительный путь:" << relativePath;

Получение только читаемых файлов с помощью QDir

QDir dir("/home/user");
QStringList list = dir.entryList(QDir::Files | QDir::Readable, QDir::Name);
for (const QString &file : list) {
    qDebug() << "Читаемый файл:" << file;
}

Флаги и фильтры

Флаги QDir::Filters:

  • QDir::Files — только файлы
  • QDir::Dirs — только каталоги
  • QDir::Hidden — скрытые файлы/папки
  • QDir::NoDotAndDotDot — исключить . и ..

Сортировка QDir::SortFlags:

  • QDir::Name — по имени
  • QDir::Time — по дате изменения
  • QDir::Size — по размеру
QDir dir("/home/user");
QStringList sortedFiles = dir.entryList(QDir::Files, QDir::Time);

Полезные методы

МетодНазначение
entryList()список файлов/папок
mkdir()создать папку
remove()удалить файл
removeRecursively()удалить папку со всем содержимым
setPath()установить путь
absoluteFilePath("file.txt")получить абсолютный путь
cd("subdir")перейти в подпапку
exists()проверить существование

QDir — это универсальный инструмент для работы с файловой системой в Qt. Он легко интегрируется с другими Qt-классами (QFile, QFileInfo) и предоставляет мощные средства навигации, фильтрации и управления файлами.