QDirListing Class
QDirListing 클래스는 디렉터리 항목에 대한 STL 스타일 이터레이터를 제공합니다. 더 보기...
Header: | #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, ExcludeSpecial, 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 생성자는 디렉토리 경로 문자열을 인수로 받습니다. 모든 항목을 재귀적으로 반복하는 방법은 다음과 같습니다:
사용 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::이터레이터플래그;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, 즉 무작위 액세스를 허용하지 않는 이동 전용, 정방향 전용, 단일 패스 반복기입니다. 범위 지정 루프(또는 랜덤 액세스 이터레이터가 필요 없는 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()도 참조하세요 .
멤버 유형 문서
열거형 클래스 QDirListing::이터레이터플래그
플래그 QDirListing::이터레이터플래그
이 열거형 클래스는 QDirListing 의 동작을 구성하는 데 사용할 수 있는 플래그를 설명합니다. 이 열거자의 값은 비트 단위로 OR 연산할 수 있습니다.
Constant | 값 | 설명 |
---|---|---|
QDirListing::IteratorFlag::Default | 0x000000 | 끊어진 심볼릭 링크(대상이 존재하지 않는 경우)를 포함한 모든 파일, 디렉터리 및 심볼릭 링크를 나열합니다. 숨겨진 파일 및 디렉터리와 특수 항목 . 및 .. 은 기본적으로 나열되지 않습니다. |
QDirListing::IteratorFlag::ExcludeFiles | 0x000004 | 일반 파일은 나열하지 않습니다. ResolveSymlinks와 함께 사용하면 일반 파일에 대한 심볼릭 링크도 제외됩니다. |
QDirListing::IteratorFlag::ExcludeDirs | 0x000008 | 디렉터리를 나열하지 않습니다. ResolveSymlinks와 함께 사용하면 디렉터리에 대한 심볼릭 링크도 제외됩니다. |
QDirListing::IteratorFlag::ExcludeSpecial | 0x000010 | 특수 시스템 파일을 나열하지 마세요:
|
QDirListing::IteratorFlag::ResolveSymlinks | 0x000020 | 심볼릭 링크 자체가 아닌 링크 대상의 유형을 기준으로 심볼릭 링크를 필터링합니다. 이 플래그를 사용하면 끊어진 심볼릭 링크(대상이 존재하지 않는 경우)는 제외됩니다. 심볼릭 링크를 지원하지 않는 운영 체제에서는 이 플래그가 무시됩니다. |
QDirListing::IteratorFlag::FilesOnly | ExcludeDirs | ExcludeSpecial | 일반 파일만 나열됩니다. ResolveSymlinks와 함께 사용하면 파일에 대한 심볼릭 링크도 나열됩니다. |
QDirListing::IteratorFlag::DirsOnly | ExcludeFiles | ExcludeSpecial | 디렉터리만 나열됩니다. 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 조합을 저장합니다.
멤버 함수 문서
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
을 반환합니다.- 무작위 액세스를 허용하지 않음
- 범위 지정 루프 또는 무작위 액세스 반복자가 필요하지 않은 C++20 std::범위 알고리즘에서 사용할 수 있습니다.
- 유효한 이터레이터를 역참조하면 다음을 반환합니다
const DirEntry &
- (c)end()는 반복의 끝을 알리는 QDirListing::sentinel 을 반환합니다. end ()와 동일하게 비교되는 반복자를 역참조하는 것은 정의되지 않은 동작입니다.
참고: 동일한 QDirListing 객체에서 (c)begin()를 호출할 때마다 내부 상태가 재설정되고 반복이 새로 시작됩니다.
(위의 제한 사항 중 일부는 기본 시스템 라이브러리 함수의 구현에 따라 결정됩니다).
예를 들어
사용 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::이터레이터플래그;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도 참조하세요 .
[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 의 파일 글로브 패턴에 따라 필터링됩니다(자세한 내용은 QDir::setNameFilters() 참조).
예를 들어 다음 이터레이터를 사용하여 오디오 파일을 반복할 수 있습니다:
QDirListing audioFileIt(u"/home/johndoe/"_s, QStringList{u"*.mp3"_s, u"*.wav"_s}, QDirListing::IteratorFlag::FilesOnly);
IteratorFlags 및 QDir::setNameFilters()도 참조하세요 .
[noexcept]
QDirListing::QDirListing(QDirListing &&other)
생성자를 이동합니다. other 을 이 QDirListing으로 이동합니다.
참고: 이동한 개체 other 는 부분적으로 형성된 상태로 배치되며, 유효한 작업은 파괴와 새 값 할당뿐입니다.
[noexcept]
QDirListing::~QDirListing()
QDirListing 를 파괴합니다.
QDirListing::IteratorFlags QDirListing::iteratorFlags() const
이 QDirListing 을 구성하는 데 사용된 IteratorFlags 집합을 반환합니다.
QString QDirListing::iteratorPath() const
이를 구성하는 데 사용된 디렉토리 경로를 반환합니다 QDirListing.
QStringList QDirListing::nameFilters() const
이를 구성하는 데 사용된 파일 이름 글로브 필터의 목록을 반환합니다 QDirListing.
[noexcept]
QDirListing &QDirListing::operator=(QDirListing &&other)
이동-이 QDirListing 에 other 을 할당합니다.
참고: 이동한 개체 other 는 부분적으로 형성된 상태로 배치되며, 유효한 작업은 파괴와 새 값 할당뿐입니다.
© 2025 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.