Festplattenindex erstellen



  • Ich möchte gerne ein Index meiner Externen Festplatte erstellen um zu wissen was (bei letzten überprüfen) drauf war wenn sie mal gerade nicht angeschlossen ist

    Momentan sind das etwa 49.090 Dateien und 3.515 Ordner.

    Leider beendet sich das Programm einfach ohne Meldung.
    Ich hoffe jemand kann mir sgen woran das liegt und wie ich das beheben kann.

    hier der verwendete Code:

    vector<_finddata_t> masterindex;
    
    void Rekursion(char *path) {
      struct _finddata_t c_file;
      long hFile;
      char *u_path=(char*)malloc(MAX_PATH);
    
      char *oldpath=(char*)malloc(MAX_PATH);
      getcwd(oldpath,MAX_PATH); 
    
      chdir(path);
      strcpy(u_path,path);
      strcat(u_path,"\\");
    
      char filepath[MAX_PATH];
    
      if( (hFile = _findfirst( "*", &c_file )) == -1L ) {
        // Nichts gefunden
        MessageBox(NULL,"Es wurden keine Dateien gefunden.",0,MB_ICONINFORMATION | MB_OK);
      }
      else {
        if (strcmp(c_file.name,".")!=0 && strcmp(c_file.name,"..")!=0) {    
          strcpy(filepath,u_path);
          strcat(filepath,c_file.name); 
          if ((c_file.attrib & _A_SUBDIR)==_A_SUBDIR) {
            // Ordner gefunden        
            masterindex.push_back(c_file);
            Rekursion(filepath);  
          }
          else {
            // Datei gefunden
            masterindex.push_back(c_file);
          }
        }
    
      	// Find the rest of the files
        while( _findnext( hFile, &c_file ) == 0 ) {
          if (strcmp(c_file.name,".")!=0 && strcmp(c_file.name,"..")!=0) {
            strcpy(filepath,u_path);
            strcat(filepath,c_file.name);      
            if ((c_file.attrib & _A_SUBDIR)==_A_SUBDIR) {
              // Ordner gefunden
              masterindex.push_back(c_file);
              Rekursion(filepath); 
            }
            else {
              // Datei gefunden
              masterindex.push_back(c_file);
            } 
          }
        }  
        _findclose(hFile);
      }
    
      chdir(oldpath);
      free(oldpath);
      free(u_path);
    }
    


  • testen konnte ich deinen code leider nicht, weil ich keine ahnung habe, was für eine seltsame api du benutzt. aber beim überfliegen deines codes ist mir aufgefallen, daß du den pfad in einem statischen c-string der länge MAX_PATH speicherst. MAX_PATH ist nur 256 und definitiv zu kurz! benutze besser einen stl-string.

    EDIT
    du kannst auch erst mal MAX_PATH durch 4096 oder so ersetzen und testen, ob der fehler dann immer noch auftritt. wenn nein, dann weißt du sicher, daß es daran gelegen hat.


Log in to reply