Ordner durchsuchen



  • Hallo zuammen,

    ich habe folgende Funktion geschrieben, die Dateien in einem Ordner und dessen Unterordner suchen soll.(Großteils hab ich die Funktion aus einem Beitrag aus dem Forum entnommen.):

    int Suchen(string start_ordner, string typ, DWORD suchmodus, FUNKZGR funkzgr, unsigned long param)
    {
     WIN32_FIND_DATA FindData = {0};
     std::string strSearchString = start_ordner + "\\*.*";
     HANDLE hSearchDirectory = FindFirstFile(strSearchString.c_str(), &FindData);
     if(hSearchDirectory != INVALID_HANDLE_VALUE)
     {
      do
      {
       if(strcmp(".", FindData.cFileName) && strcmp("..", FindData.cFileName))
       {
        if(FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
        {
         if(suchmodus & SD_DIRECTORY)
         {
          if(funkzgr(start_ordner + FindData.cFileName,start_ordner,param)==-1)
          return(-1);
         }
        }
        if(suchmodus & SD_RECURSIVE)
         {
          if(Suchen(start_ordner + FindData.cFileName + "\\",typ, suchmodus,funkzgr,param)==-1)
          return(-1);
         }
        }
        else
        {
         if(suchmodus & SD_FILE)
         {
          //Nur wenn nicht "alle Dateien" gesucht werden sollen,... 
          if(typ!="*"&&typ!=".*"&&typ!="*.*")
          {
           // ...dann den Typ prüfen... 
           string dateiname = FindData.cFileName;
           string temp="";
           for(unsigned long i=dateiname.length()-typ.length(); i< dateiname.length(); i++)
           temp+=dateiname[i];
           Konvert(typ);
           Konvert(temp);
           // und den Dateiname und den Ordner an die Funktion schicken
           if(typ == temp) if(funkzgr(FindData.cFileName,start_ordner,param)) return(-1);
          }//Dateiname und den Ordner an die Funktion schicken
          else if(funkzgr(FindData.cFileName,start_ordner,param)) return(-1);
    
         }
        }
       }
      }
      while(FindNextFile(hSearchDirectory, &FindData));
      FindClose(hSearchDirectory);
     }
     return(0);
    }
    

    in der Funktion, die mit dem Parameter "funkzgr" übergeben wird, wird der Dateiname und der Pfad einfach in einem Vektor (vector<string> ) gespeichert.
    Das funktioniert auch wunderbar, aber nur auf einem Rechner mit Win-XP und da kam es auch schon vor, dass die Unterordner nicht durchsucht wurden oder dass alle Dateien angezeigt wurden. Bei Win95 unmd Win98 SE passiert gar nichts und auf anderen Betriebsystemen konnte ich es noch nicht ausprobieren.
    Hat jemand eine Idee woran das liegen könnte?



  • was ist FUNKZGR? 😕



  • Hi

    FUNKZGR ist ein Zeiger auf ein Funktion mit folgenden Aufbau:
    typedef int (*FUNKZGR) (string,string,unsigned long);
    Der Funktion werden die Suchergebnisse übergeben.
    Der erste Wert ist der Dateiname, der zweite der Ordner in der die Datei ist, und der dritte ist ein Wert, in dem man Sachne speichern kann, die man für diese aufgerufene Funktion FUNKZGR braucht.

    Ciao Cpp-Fan


Anmelden zum Antworten