반응형

테스트 환경


Windows10

C++

Qt 5.15.2

Qt Creator 4.13.3

 

 

파일, 폴더 목록 출력


파일과 폴더 리스트 출력

#include <QFileDialog>
#include <QDebug>

QDir dir("D:/"); // 출력할 폴더 경로 입력
foreach(QFileInfo item, dir.entryInfoList()); // 폴더 내 폴더와 파일의 리스트 삽입
qDebug()<<dir.entryInfoList(); // 리스트 출력

 

 

 

파일과 폴더 구분하여 출력

#include <QFileDialog>
#include <QDebug>

QDir dir("D:/");
foreach(QFileInfo item, dir.entryInfoList() )
{
    if(item.isDir())
    {
        qDebug() << "Dir: " << item.absoluteFilePath(); // 폴더 출력
    }
    else if(item.isFile())
    {
        qDebug() << "File: " << item.absoluteFilePath(); // 파일 출력
    }
}

 

출력 결과

 

item.absoluteFilePath()는 파일의 경로를 출력하는 함수다. 파일 이름, 사이즈 등을 출력하는 다양한 함수를 지원하며 아래 링크에서 확인할 수 있다.

 

 

QFileInfo Class | Qt Core 5.15.2

QFileInfo Class The QFileInfo class provides system-independent file information. More... Header: #include qmake: QT += core Note: All functions in this class are reentrant. Public Functions Static Public Members bool exists(const QString &file) Detailed D

doc.qt.io

 

 

부모와 자기자신의 폴더 제거하여 출력

위와 같은 방법으로 폴더를 출력하면 부모와 자기 자신의 경로까지 같이 리스트에 삽입되어 출력된다.

아래 코드는 위 "파일과 폴더 구분하여 출력" 코드에서 경로만 D:/에서 D:/boot로 수정되었다.

#include <QFileDialog>
#include <QDebug>

QDir dir("D:/boot"); // 경로 수정
foreach(QFileInfo item, dir.entryInfoList() )
{
    if(item.isDir())
    {
        qDebug() << "Dir: " << item.absoluteFilePath();
    }
    else if(item.isFile())
    {
        qDebug() << "File: " << item.absoluteFilePath();
    }
}

 

 

출력 결과

 

이는 QDir::NoDotAndDotDot | QDir::AllEntries 옵션을 추가하여 해결할 수 있다. QDir::NoDotAndDotDot 옵션만 추가하면 파일이 출력되지 않는다.

#include <QFileDialog>
#include <QDebug>

QDir dir("D:/boot");
foreach(QFileInfo item, dir.entryInfoList(QDir::NoDotAndDotDot | QDir::AllEntries) ) // 옵션 추가
{
    if(item.isDir())
    {
        qDebug() << "Dir: " << item.absoluteFilePath();
    }
    else if(item.isFile())
    {
        qDebug() << "File: " << item.absoluteFilePath();
    }
}

 

출력 결과

 

 

참조


https://doc.qt.io/qt-5/qfileinfo.html