readfile funzt net
-
ich habe foglendes geschrieben:
static HANDLE hdatei; static LPVOID text; DWORD read; DWORD Filesize; memset(&read,0,sizeof(DWORD)); memset(&Filesize,0,sizeof(DWORD)); hdatei = CreateFile(L"/events.txt",GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); Filesize = GetFileSize(hdatei,NULL); if(!ReadFile(hdatei,text,Filesize,&read,NULL)) { MessageBox(NULL,L"schade",L"schade",MB_OK); }
leider funzt meine ReadFile funktion nicht.
wo ist der haken?
(die datei wird gefunden und ein handle wird auch erstellt)
-
zeig mal wie du das handle überprüfst.
-
du weisst "text" ja garkeinen speicher zu
-
warum ist text LPVOID und nicht char*
Wo ist die Speicherallokierung
char *text; if (INVALID_HANDLE_VALUE==hdatei) { printf("Habe keinen gültigen File Handle bekommen\n"); return 1; // Wert != 0 somit fehler in der Routine } text = malloc(Filesize) if (NULL==text) // Fehlerhandling { printf("Kann keinen Speicher allokieren\n"); return 2; // Wert != 0 somit fehler in der Routine }
Den so allokierten Speicher musst du später mit free wieder freigeben
Das nach dem GetFileSize eingefügt würde das Programm zumindest syntaktisch korrekt machen, aber ob es das tut was es soll ???
-
ich habe das handle mit: if(!hdatei)
überprüft.ich hab es jetzt nochmal mit der "INVALID_HANDLE_VALUE" methode überprüft und die sagt mir auch das ich ein handle bekomme.
es liegt also wirklich nur an der FileRead() und da sehe ich keinen fehler.
gibt es noch ne andere funktion die eine datei ausließt?
-
Und wie so immer die Standardfrage:
Wenn ReadFile fehlschlägt, was sagt GetLastError()?
-
wir haben dir bereits gesagt woran es liegt
-
filereader schrieb:
es liegt also wirklich nur an der FileRead() und da sehe ich keinen fehler.
*vordenkopfschlag*
Wie oft muss man dir noch sagen, dass text auf einen allokierten Speicherbereich zeigen muss?
-
sorry da hab ich nen schreibfehler.
mein "text" ist vom typ LPCTSTR und der ist schon vor allokiert.
-
Dann zeig eben nochmal deinen Code, wie du ihn wirklich hast
-
es läuft jetzt.
ich habe im dateipfad jetzt immer "\" statt "/" gesetzt.wie bekomme ich den (LPVOID) buffer über ne messagebox ausgegeben?
ich hab schon versucht mit nem LPTSTR auf den buffer zu zeigen und das ganze auszugeben aber das geht auch net.
-
Hättest Du gleich GetLastError() benutzt, hätte Dir diese Funktion den Wert
123 | The filename, directory name, or volume label syntax is incorrect. | ERROR_INVALID_NAME
zurückgegeben und Du hättest gleich gewußt, was falsch ist!
Aber nein, erst stundenlang hier im Forum auf Antwort warten, anstatt das naheliegenste zu tun (nämlich mit GetLastError() den letzten Fehler (der bei ReadFile definitiv aufgetreten ist) abzufragen).
-
Inwiefern funktioniert das denn nicht? Evtl. ist der Text auch einfach nur zu lang -> GetLastError()
-
nein dem habe ich vorgebeugt.
ich bekomme nur kästchen ausgegeben und den letzten buchstaben von dem was in der txt steht.hier mein ganzer code:
static HANDLE hdatei; static LPVOID buffer; static DWORD size; static DWORD bytes; hdatei = CreateFile(TEXT("\\programme\\wanderkarte\\events.txt"),GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL); size = GetFileSize(hdatei,NULL); buffer = malloc(size); if(hdatei == INVALID_HANDLE_VALUE) { MessageBox(NULL,L"schade",L"",MB_OK); } else { if(0 == ReadFile(hdatei,buffer, size,&bytes,NULL)) { MessageBox(NULL,L"datei konnte nicht gelesen werden",L"",MB_OK); } else { //MessageBox(NULL,L"datei konnte gelesen werden",L"",MB_OK); MessageBox(NULL,static_cast<LPCTSTR>(buffer),L"",MB_OK); } } free(&buffer); CloseHandle(hdatei);
-
MessageBoxW
-
des unterstützt meine api nicht.
wie gesagt ich bekomme den letzten buchstaben ausgegebn und alle zeichen davor werden als kästchen dargestellt.
-
ist die datei auch im unicode zeichensatz gespeichert?
-
ja.
-
Poste doch mal ein Stück von der Datei.
-
hallo welt