QDirListing Class
QDirListing 클래스는 디렉터리 항목에 대한 STL 스타일의 이터레이터를 제공합니다. 더 보기...
| 헤더: | #include <QDirListing> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
| qmake: | QT += core |
| 다음부터: | Qt 6.8부터 |
- 상속된 멤버를 포함한 모든 멤버 목록
- QDirListing은 입출력 및 네트워킹의 일부입니다.
공개 유형
| class | DirEntry |
(since 6.8) class | const_iterator |
(since 6.8) class | sentinel |
| enum class | IteratorFlag { Default, ExcludeFiles, ExcludeDirs, ExcludeOther, ResolveSymlinks, …, FollowDirSymlinks } |
| flags | IteratorFlags |
공개 함수
| QDirListing(const QString &path, QDirListing::IteratorFlags flags = IteratorFlag::Default) | |
| QDirListing(const QString &path, const QStringList &nameFilters, QDirListing::IteratorFlags flags = IteratorFlag::Default) | |
| QDirListing(QDirListing &&other) | |
| ~QDirListing() | |
| QDirListing::const_iterator | begin() const |
| QDirListing::const_iterator | cbegin() const |
| QDirListing::sentinel | cend() const |
| QDirListing::sentinel | end() const |
| QDirListing::IteratorFlags | iteratorFlags() const |
| QString | iteratorPath() const |
| QStringList | nameFilters() const |
| QDirListing & | operator=(QDirListing &&other) |
상세 설명
QDirListing을 사용하면 디렉터리의 항목을 하나씩 탐색할 수 있습니다. 이 함수는 ` QDir::entryList()` 및 ` QDir::entryInfoList()`와 유사하지만, 항목을 한 번에 모두 나열하는 대신 하나씩 나열하기 때문에 확장성이 더 뛰어나며 대용량 디렉터리에 더 적합합니다. 또한 디렉터리 내용을 재귀적으로 나열하고 심볼릭 링크를 따라가는 기능도 지원합니다. ` QDir::entryList()`와 달리, `QDirListing`은 정렬 기능을 지원하지 않습니다.
QDirListing 생성자는 디렉터리 경로 문자열을 인자로 받습니다. 다음은 모든 항목을 재귀적으로 반복 처리하는 방법입니다:
using ItFlag = QDirListing::IteratorFlag;
for (const auto &dirEntry: QDirListing(u"/etc"_s, ItFlag::Recursive)) {
qDebug() << dirEntry.filePath();
// /etc/.
// /etc/..
// /etc/X11
// /etc/X11/fs
// ...
}다음은 이름에 따라 필터링된 모든 일반 파일을 재귀적으로 찾아 읽고 처리하는 방법입니다:
F = QDirListing::IteratorFlag;
QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s}, F::FilesOnly | F::Recursive);
for (const auto &dirEntry: dirList) {
QFile f(dirEntry.filePath());
if (f.open(QIODevice::ReadOnly))
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}다음은 일반 파일만 재귀적으로 나열하는 방법입니다:
using F = QDirListing::IteratorFlag;
const auto flags = F::FilesOnly | F::Recursive;
for (const auto &dirEntry : QDirListing(u"/etc"_s, flags)) {
// ...
}다음은 일반 파일과 일반 파일에 대한 심볼릭 링크만 재귀적으로 나열하는 방법입니다:
using F = QDirListing::IteratorFlag;
const auto flags = F::FilesOnly | F::Recursive | F::ResolveSymlinks;
for (const auto &dirEntry : QDirListing(u"/etc"_s, flags)) {
// ...
}QDirListing::const_iterator 이 클래스는 C++20의 std::input_iterator를 구현합니다. 즉, 무브 전용, 순방향 전용, 단일 통과 이터레이터로, 임의 접근을 허용하지 않습니다. 범위 for 루프(또는 임의 접근 이터레이터가 필요하지 않은 C++20 범위 알고리즘)에서 사용할 수 있습니다. 유효한 이터레이터를 참조 해제하면 ` QDirListing::DirEntry ` 객체가 반환됩니다. (c) `end()` 센티넬은 반복의 끝을 표시합니다. ` sentinel `와 동일한 이터레이터를 참조 해제하는 것은 정의되지 않은 동작입니다.
QDirListing::DirEntry 는 QFileInfo 의 API 중 일부(예: fileName(), filePath(), exists())를 제공합니다. 내부적으로 DirEntry 는 필요한 경우, 즉 해당 정보가 다른 시스템 함수에 의해 이미 가져오지 않은 경우에만 QFileInfo 객체를 생성합니다. DirEntry::fileInfo()를 사용하여 QFileInfo 를 얻을 수 있습니다. 예를 들어:
using ItFlag = QDirListing::IteratorFlag;
for (const auto &dirEntry : QDirListing(u"/etc"_s, ItFlag::Recursive)) {
// Faster
if (dirEntry.fileName().endsWith(u".conf")) { /* ... */ }
// This works, but might be potentially slower, since it has to construct a
// QFileInfo, whereas (depending on the implementation) the fileName could
// be known already
if (dirEntry.fileInfo().fileName().endsWith(u".conf")) { /* ... */ }
}
using ItFlag = QDirListing::IteratorFlag;
for (const auto &dirEntry : QDirListing(u"/etc"_s, ItFlag::Recursive)) {
// Both approaches are the same, because DirEntry will have to construct
// a QFileInfo to get this info (for example, by calling system stat())
if (dirEntry.size() >= 4'000 /* 4KB */) { /* ...*/ }
if (dirEntry.fileInfo().size() >= 4'000 /* 4KB */) { /* ... */ }
}QDir 와 QDir::entryList()도 참조하십시오 .
멤버 유형 문서
enum class QDirListing::IteratorFlag
flags QDirListing::IteratorFlags
이 열거형 클래스는 QDirListing 의 동작을 구성하는 데 사용할 수 있는 플래그를 정의합니다. 이 열거형의 값들은 비트별 OR 연산을 통해 결합할 수 있습니다.
| 상수 | 값 | 설명 |
|---|---|---|
QDirListing::IteratorFlag::Default | 0x000000 | 모든 항목, 즉 파일, 디렉터리, 깨진 심볼릭 링크(대상이 존재하지 않는 경우)를 포함한 심볼릭 링크 및 특수(기타) 시스템 파일을 나열합니다. 자세한 내용은 ExcludeOther를 참조하십시오. 숨겨진 파일과 디렉터리, 그리고 특수 항목인 . 및 .. 는 기본적으로 나열되지 않습니다. |
QDirListing::IteratorFlag::ExcludeFiles | 0x000004 | 일반 파일을 나열하지 않습니다. ResolveSymlinks와 함께 사용하면 일반 파일에 대한 심볼릭 링크도 제외됩니다. |
QDirListing::IteratorFlag::ExcludeDirs | 0x000008 | 디렉터리를 나열하지 않습니다. ResolveSymlinks와 함께 사용하면 디렉터리로 연결되는 심볼릭 링크도 제외됩니다. |
QDirListing::IteratorFlag::ExcludeOther | 0x000010 | [6.10부터] 디렉터리, 일반 파일 또는 심볼릭 링크가 아닌 파일 시스템 항목은 나열하지 않습니다.
|
QDirListing::IteratorFlag::ResolveSymlinks | 0x000020 | 심볼릭 링크 자체보다는 링크의 대상 유형을 기준으로 심볼릭 링크를 필터링합니다. 깨진 심볼릭 링크(대상이 존재하지 않는 경우)는 제외되며, 이를 포함하려면 IncludeBrokenSymlinks를 설정하십시오. 이 플래그는 심볼릭 링크를 지원하지 않는 운영 체제에서는 무시됩니다. |
QDirListing::IteratorFlag::IncludeBrokenSymlinks | 0x001000 | [6.11부터] ResolveSymlinks 플래그의 설정과 관계없이, 대상이 존재하지 않는 끊어진 심볼릭 링크를 나열합니다. 이 플래그는 심볼릭 링크를 지원하지 않는 운영 체제에서는 무시됩니다. |
QDirListing::IteratorFlag::FilesOnly | ExcludeDirs | ExcludeOther | 일반 파일만 나열됩니다. ResolveSymlinks와 함께 사용하면 파일에 대한 심볼릭 링크도 나열됩니다. |
QDirListing::IteratorFlag::DirsOnly | ExcludeFiles | ExcludeOther | 디렉터리만 나열됩니다. ResolveSymlinks와 함께 사용하면 디렉터리로 연결되는 심볼릭 링크도 나열됩니다. |
QDirListing::IteratorFlag::IncludeHidden | 0x000040 | 숨겨진 항목을 나열합니다. Recursive와 함께 사용하면, 숨겨진 하위 디렉터리로도 재귀적으로 탐색합니다. |
QDirListing::IteratorFlag::IncludeDotAndDotDot | 0x000080 | . 및 .. 특수 항목을 나열합니다. |
QDirListing::IteratorFlag::CaseSensitive | 0x000100 | QDirListing 생성자에 전달된 이름 필터의 파일 글로브 패턴은 대소문자를 구분하여 일치 여부가 확인됩니다(자세한 내용은 QDir::setNameFilters()을 참조하십시오). |
QDirListing::IteratorFlag::Recursive | 0x000400 | 모든 하위 디렉터리의 항목도 함께 나열합니다. FollowDirSymlinks와 함께 사용하면 디렉터리를 가리키는 심볼릭 링크도 반복 처리됩니다. |
QDirListing::IteratorFlag::FollowDirSymlinks | 0x000800 | Recursive와 함께 사용하면 디렉터리로 연결된 심볼릭 링크도 반복 처리됩니다. 심볼릭 링크 루프(예: link => . 또는 link => ..)는 자동으로 감지되어 무시됩니다. |
IteratorFlags 유형은 QFlags<IteratorFlag>에 대한 typedef입니다. 이 유형은 IteratorFlag 값들의 OR 조합을 저장합니다.
멤버 함수 문서
[explicit] QDirListing::QDirListing(const QString &path, QDirListing::IteratorFlags flags = IteratorFlag::Default)
path 을 반복 처리할 수 있는 QDirListing 객체를 생성합니다.
flags 를 통해 옵션을 전달하여 디렉터리를 반복 처리하는 방식을 제어할 수 있습니다.
기본적으로 ` flags `는 ` IteratorFlag::Default`입니다.
IteratorFlags도 참조하십시오 .
[explicit] QDirListing::QDirListing(const QString &path, const QStringList &nameFilters, QDirListing::IteratorFlags flags = IteratorFlag::Default)
path 을 반복 처리할 수 있는 QDirListing 객체를 생성합니다.
flags 을 통해 옵션을 전달하여 디렉터리를 반복 처리하는 방식을 제어할 수 있습니다. 기본적으로 flags 의 값은 IteratorFlag::Default 입니다.
나열된 항목은 nameFilters 에 지정된 파일 글로브 패턴에 따라 필터링되며, 이 패턴은 QRegularExpression::fromWildcard 를 사용하여 정규 표현식으로 변환됩니다(자세한 내용은 QDir::setNameFilters()을 참조하십시오).
예를 들어, 다음 이터레이터를 사용하여 오디오 파일을 순회할 수 있습니다:
QDirListing audioFileIt(u"/home/johndoe/"_s, QStringList{u"*.mp3"_s, u"*.wav"_s},
QDirListing::IteratorFlag::FilesOnly);때로는 범위 for 루프를 사용하여 항목을 반복하고 문자열 비교를 통해 이름으로 더 효율적으로 필터링할 수 있습니다. 예를 들어:
using F = QDirListing::IteratorFlag;
const auto flags = F::FilesOnly | F::Recursive | F::ResolveSymlinks;
for (const auto &dirEntry : QDirListing(u"/usr"_s, flags)) {
// Faster than using name filters, filter ".txt" and ".html" files
// using QString API
const QString fileName = dirEntry.fileName();
if (fileName.endsWith(".txt"_L1) || fileName.endsWith(".html"_L1)) {
// ...
}
}
}IteratorFlags 및 QDir::setNameFilters()도 참조하십시오 .
[noexcept] QDirListing::QDirListing(QDirListing &&other)
이동 생성자. other 를 이 QDirListing으로 이동합니다.
참고: 이동된객체 other 은 부분적으로 형성된 상태로 전환되며, 이 상태에서는 소멸과 새 값 할당만이 유효한 작업입니다.
[noexcept] QDirListing::~QDirListing()
QDirListing 를 삭제합니다.
QDirListing::const_iterator QDirListing::begin() const
QDirListing::const_iterator QDirListing::cbegin() const
QDirListing::sentinel QDirListing::cend() const
QDirListing::sentinel QDirListing::end() const
(c) `begin()`는 디렉터리 항목을 순회하는 데 사용할 수 있는 ` QDirListing::const_iterator `를 반환합니다.
- 이는 순방향 전용, 단일 통과 이터레이터입니다(디렉터리 항목을 역순으로 반복할 수 없음).
- 복사할 수 없으며, 오직 `
std::move()` d만 가능합니다. std::input_iterator를 모델링하는 객체에 대한 후증가 연산의 반환 값은 부분적으로 형성된 상태(그 이후로 진행된 이터레이터의 복사본)이며, 이러한 객체에 대해 유효한 유일한 연산은 소멸 및 새 이터레이터의 할당뿐입니다. 따라서 후증가 연산자는 이터레이터를 진행하고void를 반환합니다.- 임의 접근을 허용하지 않음
- 범위 지정 for 루프에서 사용 가능하거나, 임의 접근 이터레이터가 필요하지 않은 C++20 std::ranges 알고리즘과 함께 사용할 수 있습니다
- 유효한 이터레이터를 역참조하면
const DirEntry & - (c) `end()`는 반복의 끝을 알리는 ` QDirListing::sentinel `를 반환합니다. ` end()`와 동일한 값을 가지는 이터레이터를 간접 참조하는 것은 정의되지 않은 동작입니다.
참고: 동일한 QDirListing 객체에 대해 (c)begin()이 호출될때마다 내부 상태가 초기화되고 반복 처리가 다시 시작됩니다.
(위의 제한 사항 중 일부는 기본이 되는 시스템 라이브러리 함수의 구현에 의해 결정됩니다).
예를 들어:
using ItFlag = QDirListing::IteratorFlag;
for (const auto &dirEntry: QDirListing(u"/etc"_s, ItFlag::Recursive)) {
qDebug() << dirEntry.filePath();
// /etc/.
// /etc/..
// /etc/X11
// /etc/X11/fs
// ...
}다음은 이름에 따라 필터링된 모든 파일을 재귀적으로 찾아 읽고 처리하는 방법입니다:
F = QDirListing::IteratorFlag;
QDirListing dirList(u"/sys"_s, QStringList{u"scaling_cur_freq"_s}, F::FilesOnly | F::Recursive);
for (const auto &dirEntry: dirList) {
QFile f(dirEntry.filePath());
if (f.open(QIODevice::ReadOnly))
qDebug() << f.fileName() << f.readAll().trimmed().toDouble() / 1000 << "MHz";
}참고: "고전적인" STL알고리즘은 이터레이터/센티넬을 지원하지 않으므로, ` QDirListing`을 사용하려면 C++20의 `std::ranges` 알고리즘을 사용하거나, C++17에서 범위 기반 알고리즘을 제공하는 타사 라이브러리를 사용해야 합니다.
QDirListing::DirEntry도 참조하십시오 .
QDirListing::IteratorFlags QDirListing::iteratorFlags() const
이 QDirListing 를 생성하는 데 사용된 IteratorFlags 집합을 반환합니다.
QString QDirListing::iteratorPath() const
이 ` QDirListing`을 생성하는 데 사용된 디렉터리 경로를 반환합니다.
QStringList QDirListing::nameFilters() const
이 ` QDirListing`를 구성하는 데 사용된 파일 이름 글로브 필터 목록을 반환합니다.
[noexcept] QDirListing &QDirListing::operator=(QDirListing &&other)
other 를 이 QDirListing 로 이동-할당합니다.
참고: 이동된객체 other 는 부분적으로 형성된 상태가 되며, 이 상태에서는 소멸과 새 값 할당만이 유효한 연산입니다.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.