Dateien durchsuchen... was kann da falsch sein?



  • Hallo zusammen,

    kann jemand einen Fehler hier entdecken? Das Programm stürzt bei mir ab:

    // FMUpdate.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung.
    //

    /*

    Soll alle fmd-Dateien in Unterverzeichnisen suchen und "irgendwie" updaten...

    */

    #include <stdio.h>     // I/O
    #include <iostream.h>
    #include <io.h>
    
    struct _finddata_t entry;
    long handle;
    
    int main(int argc, char* argv[]){
    
    	if( _findfirst("*.*",&entry)!=-1 ) {
    		do {
    			printf( "%s\n" , entry.name );
    		} while( _findnext(handle,&entry)==NULL );
    		_findclose(handle); 
    	}
    
    	return 0;
    }
    


  • Du hast vergessen, 'handle' mit einem Wert zu belegen (anhand dieses Handle's will _findnext() später deine Suchabfrage erkennen und fortsetzen):

    if( (handle=_findfirst("*.*",&entry)) !=-1)
      ...
    


  • Was hat das mit C++ zu tun?



  • Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • danke!!



  • ähm, habs jetzt so probiert:

    if( handle=_findfirst("./*.*",&entry)!=-1 ) {
    	do {
    		printf( "%s\n" , entry.name );
    	} while( _findnext(handle,&entry)==NULL );
    	_findclose(handle); 
    }
    

    Aber irgendwie funktioniert es immer noch nicht... Es wird nur der erste "." ausgebene, dann hört die Ausgabe auf...

    Kann mir dabei jmd. weiterhelfen?

    Viele Grüße,

    Tobias



  • prüfe mal, welchen rückgabewert die funktion hat (die in der while-bedingung) und dann überprüfe das mit der erwartung



  • Hello 😃

    Habs schnell geschrieben und funktioniert so komplett.
    Die Textausgaben kannst ja so machen wie du willst.
    Ist ein schnelles Beispiel und gleich getestet.

    #include <windows.h>
    #include <stdio.h>     
    #include <io.h> 
    
    void Anzeige()
     {
     int iFehler=0;
     char cFehlertext[100]="";
     char cBuffer[10000]="";
     WIN32_FIND_DATA FindFileData;
     HANDLE hFind;
    
     hFind = FindFirstFile("*.*", &FindFileData);
     strcpy(cBuffer,"");
     strcat(cBuffer,FindFileData.cFileName);
     strcat(cBuffer,",");
    
     if (hFind == INVALID_HANDLE_VALUE) 
      {
      iFehler=GetLastError();
      itoa(iFehler,cFehlertext,10);
      MessageBox(NULL,cFehlertext," Fehlerinfo ",MB_OK);
      } 
     else 
      {
      while(FindNextFile(hFind,&FindFileData) != 0)
       {
       strcat(cBuffer,FindFileData.cFileName);
       strcat(cBuffer,",");
       }
      FindClose(hFind);
      MessageBox(NULL,cBuffer," Ergebnis ",MB_OK);
      }
     }
    
    int WINAPI WinMain(HINSTANCE d1, HINSTANCE d2, LPSTR d3, int d4)
     {
     Anzeige();
     }
    


  • Super, danke... bei mir daheim hats grad funktioniert.
    Hm, jetzt muss ich noch schauen, ob das bei der Arbeit geht... (da ging das andere Beispiel nämlich nicht!) ... Danke!

    Gruß, Tobias


Anmelden zum Antworten