FindNext - Probleme



  • Hallo ich möchte ein Verzeichnis rekursiv durchsuchen. Daszu prüfe ich ob der Dateiname ein Verzeichnis ist und nicht ".." und nicht "." ist. Soweit die Theorie : hier der Quellecode.

    void FindFiles( string StartPos )
    {
    	// Sucht im Aktuellen Verzeichnis nach allen Dateien.
    
    	WIN32_FIND_DATA FindFileData;
    	HANDLE hFind; 
    	string Search = StartPos + "\\*.*";
    
    	hFind = FindFirstFile(Search.c_str(), &FindFileData);
    
    	while (FindNextFile(hFind,&FindFileData))
    	{
    
    		if ( FindFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY  && FindFileData.cFileName != ".." && FindFileData.cFileName != "." )
    		{
    			cout<< FindFileData.cFileName << "\t";
    
    			string NextFolder = StartPos + "\\" + FindFileData.cFileName;
    			cout<< "Ordner \t"<<NextFolder << "\n";
    
    			int a ;
    			cin >> a;
    
    			FindFiles(NextFolder.c_str());
    		}
    
    		cout<< FindFileData.cFileName << "\n";
    
    	} 
    
    	//cout<< StartPos<<"\n";
    
        FindClose(hFind); 
    }
    

    Leider nimmt er triotzdem das Verzeichnis ".." mit und läuft dadurch natürlich in eine Endlosschleife. Kann mir jemand helfen ?=



  • FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY

    keine Ahnung ob's daran liegt aber mit == würde ich es nicht machen!



  • Danke für den Tipp aber daran lags leider nicht



  • Vielleicht daran: String-Vergleiche macht man mit strcmp 😉



    1. FindFirstFile liefert auch schon einen Eintrag zurück, den ignorierst Du.
    2. Stringvergleiche würde ich immer mit lstrcmp durchführen und nie als direkten Vergleich.
    3. Nach dem Aufruf von FindFirstFile wird nicht geprüft, ob hFind ungültig (INVALID_HANDLE_VALUE) ist.

Anmelden zum Antworten