Rekursives Ordnerdurchsuchen mit Qt



  • Hi,
    ich hab ein problem...
    ich will mit Qt 2.3 Windows Non-Commercial Version einen Verzeichnisbaum rekursiv durchsuchen und alle dateien in einem Textfeld anzeigen lassen (txtLog).
    beim ersten verzeichnis funktioniert das auch wunderbar, aber sobald ich in einen unterordner wechsel, und damit dieselbe funktion mit neuen parametern aufrufe erhalte ich die fehlermeldung "QDir::Cannot Read Directory x"
    hier mein code

    void recursiveSearch(QDir *directory, QString filter)
    {
      txtLog->append("search in directory: "+directory->absPath() );
    
      //get file-list
      directory->setNameFilter(filter);
      directory->setFilter(QDir::Files);
      QStringList fileList(directory->entryList());
      fileList.sort();
    
      //get dir-list
      directory->setNameFilter("*");
      directory->setFilter(QDir::Dirs);
      QStringList dirList(directory->entryList());
      dirList.sort();
    
      //for each file
      for(QStringList::Iterator fileIterator = fileList.begin(); fileIterator != fileList.end(); fileIterator++)
      {
        QFile *curFile = new QFile(*fileIterator);
        txtLog->append("New File found: "+curFile->name() );
      }
    
      //for each directory
      for(QStringList::Iterator dirIterator = dirList.begin(); dirIterator != dirList.end(); dirIterator++)
      {
        QDir *curDir = new QDir(*dirIterator);
    
        //"." and ".." are no valid subdirs -> filter them
        if( curDir->path().compare(".") == 0 ) continue;
        if( curDir->path().compare("..") == 0 ) continue;
    
        //subdir found so search there
        if( curDir->exists() )
          recursiveSearch(curDir, filter);
      }
    }
    

    kann mir jemand helfen?

    danke im voraus
    Errraddicator



  • Ohne jetz deinen Source genau angesehen zu haben:

    Du läuftst 2mal einen List durch. Warum?

    Wenn du ein Dir öffnest und einen Eintrag bekommst dann checke ob es ein Dir oder ein File ist. Ist es ein DIR dann Recurs. Ist es ein File dann weiter.

    QFileInfo hilft dir da weiter


Anmelden zum Antworten