Dateien Konvertieren



  • argv kommt eigentlich aus der main-Funktion. Wenn du also einen Parameter erwartest, sollte man diese auch dem Programm übergeben können und dann an die zu verarbeitende Funktion weiterreichen.

    main.cpp:71: error: incompatible types in assignment of `std::string' to `CHAR[260]'

    Wenn du einen string in ein char-Array kopieren willst, solltest du das mit c_str() von string (liefert einen char const*) und strncpy machen, also statt:

    wfd.cFileName=filename;
    

    dies:

    strncpy(wfd.cFileName, filename.c_str(), 259); // 1 Zeichen für die Endekennung
    

    Greetz



  • Habe dann jetzt:

    else 
                             { 
    
                              cout << wfd.cFileName << endl;  //Namen der Dateien ausgeben 
                              strncpy(wfd.cFileName, filename.c_str(), 259); // 1 Zeichen für die Endekennung
                              Konvert(filename);
    
                              } 
                              } 
                              } 
                         while (FindNextFile(fHandle,&wfd)); 
              FindClose(fHandle); 
    
           cin.get();
    }
    
    void Konvert(const string& filename)
    {
    
       //_TCHAR filename[FILENAME_MAX + 1];
    
                          	//if (argc != 2) {
    	                   	//printf("Unzulaessige Parameterzahl!\n");
    	                   	//printf("Aufruf:\n");
    	                   	//printf("DEAConverter <Dateiname>\n");
    		                //return 0;
    	                 //} 
    
                      char*	strncpy(filename/*, argv[1], FILENAME_MAX*/);
                       	FILE *f = _tfopen(filename, _T("rb"));
                        	if (f) {
                         		DEA_ARCHIV_TYP DEARecord;
                           		while(!feof(f)) {
                             			fread(&DEARecord, sizeof(DEARecord), 1, f);
                                			struct tm stm = *localtime(&DEARecord.Startzeit);
                                   			printf("%02d.%02d.%04d %02d:%02d.%02d,%03d : ", stm.tm_mday
    

    Und "nur" noch 2 Fehler die ich allerdings nicht verstehe:

    Zeile 34: error: cannot convert `const std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to `char*' in initialization

    Zeile 35: error: cannot convert `const std::basic_string<char, std::char_traits<char>, std::allocator<char> >' to `const char*' for argument `1' to `FILE* fopen(const char*, const char*)'



  • Vellas schrieb:

    main.cpp:71: error: incompatible types in assignment of `std::string' to `CHAR[260]'

    Wenn du einen string in ein char-Array kopieren willst, solltest du das mit c_str() von string (liefert einen char const*) und strncpy machen, also statt:

    wfd.cFileName=filename;
    

    dies:

    strncpy(wfd.cFileName, filename.c_str(), 259); // 1 Zeichen für die Endekennung
    

    Wobei - eigentlich benötigst du ja die andere Richtung - filename=wfd.cFileName (bzw. kannst gleich wdf.cFileName an die Funktion übergeben)

    Die Warnung besagt, daß du einer lokalen Variablen den selben Namen gegeben hast wie dem Parameter - ergo kommst du nicht mehr an den Parameter heran. Du brauchst da auch kein zusätzliches char-Array in der Funktion mehr anzulegen:

    void Konvert(const string& filename)
    {
      FILE *f = _tfopen(filename.c_str(), _T("rb"));
      if (f)
      {
        DEA_ARCHIV_TYP DEARecord;
        ... //der Rest wie gehabt
      }
    }
    

    PS: Bitte entscheide dich für eine einheitliche Zeichen-Repräsentation - das bunte Mischen von 'char' (ANSI-Zeichen) und 'TCHAR' (je nach Optionen ANSI- oder UNICODE-Zeichen) bereitet später nur Probleme.



  • Danke an alle, die mir hierbei geholfen haben!
    Compilieren und ausführen klappt jetzt.
    Die Konvertierung haut noch nicht hin, es gibt zumindest hinterher keine Dateien die lesbaren Text enthalten. Aber da schau ich mal ob ich da noch was übers WE hinbekomme 🙂
    Falls ich Probleme habe weiß ich ja nun wo ich kompetente Hilfe bekomme.

    Ein schönes Wochenende!
    gruß Sebastian


Anmelden zum Antworten