c++ readFile komische Ausgabe



  • Hey
    Ich habe folgendes Problem. Ich muss eine textdatei einlesen( mit readFile) und die einzelnen zeichend in einen char array speichern zur weiterverarbeitung. Habe in c++ noch nicht so viele erfahrungen und muss herlich zugeben, dass ich das was ich zu readFile im i net gefunden habe nicht alles hundert prozentig verstanden habe ;). Habe folgenden quelltext im i net gefunden und mal in mein projekt reinkopiert um zu schauen was passiert( habe eine textdatei mit dem namen data.txt angelegt eine 1 eingefügt und in den ordner mit meinem c++ projekt gespeichert. War soweit auch alles io nur die konsolenausgabe war dann eben keine 1 sondern eine zahlenfolge 52529....
    Was ist da passiert und wie bekomme ich stattdessen die einzelnen zeichen als chars in ein array..so das danach auch wirklich die zeichen und nicht zahlenfolgen drinsteh?

    HANDLE hFile = CreateFile(TEXT("data.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(hFile == INVALID_HANDLE_VALUE) {
    std::cout << "Datei konnte nicht geöffnet werden!" << std::endl;
    return EXIT_FAILURE;
    }

    // Dateigröße ermitteln
    DWORD dwFileSize = GetFileSize(hFile, NULL);

    // Speicher für Buffer reservieren
    LPTSTR pszBuffer = new TCHAR[dwFileSize + 1];

    // Datei auslesen
    DWORD dwBytesRead = 0;
    ReadFile(hFile, pszBuffer, dwFileSize, &dwBytesRead, NULL);
    pszBuffer[dwBytesRead] = '\0';

    // Dateiinhalt ausgeben
    int i = 0;
    while( pszBuffer[i] != '\0')
    {
    cout << pszBuffer[i];
    i++;

    }
    // Datei schließen
    CloseHandle(hFile);

    return EXIT_SUCCESS;
    }

    LG Susi



  • Lies halt mal nur 1 Byte ein, anstatt das gesamte File.

    btw: nutze die cpp-Tags

    HANDLE hFile = CreateFile(TEXT("data.txt"), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
    if(hFile == INVALID_HANDLE_VALUE) {
    std::cout << "Datei konnte nicht geöffnet werden!" << std::endl;
    return EXIT_FAILURE;
    }
    
    // Speicher für Buffer reservieren
    TCHAR pszBuffer[4];
    
    // Datei auslesen
    DWORD dwBytesRead = 0;
    ReadFile(hFile, pszBuffer, 4, &dwBytesRead, NULL);
    pszBuffer[dwBytesRead] = '\0';
    
    // Dateiinhalt ausgeben
    int i = 0;
    while( pszBuffer[i] != '\0')
    {
      cout << pszBuffer[i];
      i++;
    }
    // Datei schließen
    CloseHandle(hFile);
    
    return EXIT_SUCCESS;
    }
    

    Ohne Garantie, aber in etwa in diese Richtung sollte es gehen.

    Allerdings würde ich, wenn du sowieso mit der Standardbibliothek arbeiten kannst die auch gleich nutzen:

    #include <iostream>
    #include <ifstream>
    
    int main ()
    {
      int value = 0; 
    
      std::ifstream in ("data.txt");
    
      in >> value;
    
      std::cout << "Wert eingelesen: " << value << std::endl;
    }
    


  • Hey
    Ok das ausgabe problem habe ich inzwischen gelöst..wird mir alles auf der konsole ausgegeben. Jetzt möchte ich das file aber stück für stück einlesen d.h. 5 zeichen in meinen buffer lesen und den buffer ausgeben..dann die nächsten 5 zeichen aus dem file in den buffer lesen ...usw. Die frage ist wo gebe ich das an das ich erst z.b. ab dem 5 zeichen im file das lesen des files starten will?

    LG




Anmelden zum Antworten