Wirre Zeichen beim lesen mit ReadFile



  • Hallo ich versuche eine TXT zu lesen.Bekomme da nur wirre Zeichen und weiss nicht warum... hier mein code

    tmpFile = CreateFile(filePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
    ret_size = GetFileSize(tmpFile,&lpFileSizeHigh);
    pszFileText = malloc(ret_size);
    ReadFile(tmpFile,pszFileText,ret_size,&r,NULL);
    

    tmpFile = 0x000000c8
    ret_size = 38
    pszFileText = 0x00a92fa8 "瑨灴⼺ㄯ...usw"
    r = 38

    hoffe es kann geholfen werden 🙂



  • Hi,

    mir fällt so direkt kein Fehler auf.. benutze aber CreateFile und ReadFile eigentlich auch nie 😉
    Hast du das mal mit fopen() versucht und funktioniert es da?
    Wenn nicht, liegts wohl schonmal nicht am Textfile.
    Ansonsten mal mit nem festen buffer versucht?
    Retval von ReadFile?
    Den Fehler halt nach und nach einengen 😉



  • Die Zeichen stehen so nicht in der Datei. Lediglich deine Form der Anzeige des Dateinhaltes macht daraus das was du siehst.



  • Auch mal prüfen, ob Readfile true zurückgibt und falls nicht, mit GetLastError() feststellen, um was für einen Fehler es sich handelt.

    Die Addresse von tmpFile kommt mir etwas suspekt vor.



  • Hast Du mal nachgeprüft, ob die Textdatei auch 38 Zeichen hat?

    Betonung liegt auf Zeichen, nicht Bytes!

    Ich habe nämlich den Verdacht, daß Du versuchst eine ANSI-Textdatei mit Unicode-Applikation zu lesen
    (oder auch umgekehrt eine ANSI-Applikation versucht eine Unicode-Textdatei zu lesen)

    HTH,
    Martin



  • Mmacher schrieb:

    Hast Du mal nachgeprüft, ob die Textdatei auch 38 Zeichen hat?

    Betonung liegt auf Zeichen, nicht Bytes!

    Ich habe nämlich den Verdacht, daß Du versuchst eine ANSI-Textdatei mit Unicode-Applikation zu lesen
    (oder auch umgekehrt eine ANSI-Applikation versucht eine Unicode-Textdatei zu lesen)

    HTH,
    Martin

    Ja mein buffer war vom typ LPWSTR 🙂 jetzt haut es hin danke für die vielen tipps

    muss also so aussehen

    char *pszFileText; 
    ret_size = GetFileSize(tmpFile,NULL);
    pszFileText = malloc(ret_size); 
    ReadFile(tmpFile,pszFileText,ret_size,&r,NULL); 
    pszFileText[ret_size] = '\0';
    


  • char *pszFileText;
    ret_size = GetFileSize(tmpFile,NULL);
    pszFileText = malloc(ret_size[b][u] + 1[/u][/b]); 	
    pszFileText[ret_size] = '\0'; 	
    C/C++ Code:
    pszFileText[ret_size] = '\0'; 	
    C/C++ Code:
    pszFileText[ret_size] = '\0';
    


  • Die Returnwerte könnten vielleicht auch beachtet werden. Bei Dateioperationen in Verbindung mit Speicheranforderung vielleicht auch nicht ganz verkehrt 😃 .
    Wenn tmpFile ungültig ist, hat das Handle den Wert INVALID_HANDLE_VALUE. Übergibt man dieses ungültige Handle an GetFileSize, liefert diese Funktion INVALID_FILE_SIZE (= 0xFFFFFFFF 🤡 ) zurück.


Log in to reply