Qt 컴포지팅 및 비컴포지팅 파일 [심도 컴포지팅/광도 컴포지팅/교체기]

2735 단어 Qt
파일 전송이라는 기능을 실현하는 과정에서 자주 폴더를 훑어보아야 한다. 다음은QT에서 폴더를 훑어보는 방법을 정리한다.
두루 다니면 귀속과 비귀속 두 종류로 나눌 수 있다.

귀속


귀속은 주로 4단계로 요약할 수 있다. ① QDir를 통해 대상 폴더에 접근하고 ② 필터에 필요한 파일 형식 ③ 필터된 파일 정보 목록 ④ 파일 정보 목록을 가져오고 파일 경로를 꺼내 귀속 함수를 호출한다.
실현 방법 1 (깊이 있게 훑어보고 코드가 간결하다)
void fileTraverse(QString path)
{
    QDir dir(path);
    if(!dir.exists())
        return;
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden);    // 、 , 
    dir.setSorting(QDir::DirsFirst);    // 

    foreach(QFileInfo info,dir.entryInfoList())
    {
        if(info.isFile())
        {
            //do what you wanna do
        }
        else
        {
            //do what you wanna do
            fileTraverse(info.filePath());
        }
    }
}

실현 방법 2 (깊이 훑어보기)
void fileTraverse(QString path)
{
    QDir dir(path);
    if(!dir.exists())
    {
        return;
    }
    dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden);
    dir.setSorting(QDir::DirsFirst);    // 
    QFileInfoList list = dir.entryInfoList();

    for(int i=0; i

비귀속


반복 코드는 간결하지만 효율이 비교적 낮다.다음은 두 가지 비귀속 방법이다. 방법은 셋째, 대열을 이용하여 넓이를 두루 훑어보고 넷째, 교체기를 사용한다.
실현 방법 3 (광도 역력, 대기열)
void bfsFileTraverse(QString path)
{
    QFileInfo currentInfo(path);
    QDir dir(path);

    if(!dir.exists())
        return;

    QQueue infoQueue;    // 
    infoQueue.enqueue(currentInfo);

    while(!infoQueue.isEmpty())
    {
        dir = infoQueue.head().filePath();    // 
        infoQueue.dequeue();
        dir.setFilter(QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden);    // 、 , 
        dir.setSorting(QDir::DirsFirst);    // 
        QFileInfoList list = dir.entryInfoList();
        for(int i=0; i

실현 방법 4 (교체기)
void fileTraverse(QString path)
{
    QStringList fileList;
    QDir dir(path);
    if(!dir.exists())
    {
        return;
    }
    QDirIterator dirIterator(path,QDir::Dirs | QDir::Files | QDir::NoDotAndDotDot | QDir::Hidden,QDirIterator::Subdirectories);
    while(dirIterator.hasNext())
    {
        dirIterator.next();
        QFileInfo fileInfo = dirIterator.fileInfo();

        if(fileInfo.isFile())
        {
            qDebug()<

【참고문장】
Qt 스트리밍 폴더(entryInfoList 자체는 반환되지 않음)
Qt 폴더 스트리밍
Qt 파일 반복

좋은 웹페이지 즐겨찾기