Problem mit Funktion
-
ReadFile liest immer Bytes, unabhängig vom Inhalt der Datei. Daher arbeitet ReadFile immer "binär".
Warum hast du diesen alten Thread hochgeholt und keinen neuen eröffnet?
-
Ich hab das hier noch drangehängt, weil dieser Thread ziemlich genau meinem Problem entsprach.
Aber nochmal zu ReadFile(): Wenn ich damit eine exe-Datei auslese, geschieht das nicht in den Packeten, die ich als Parameter angegeben habe. Ich nehme an, das liegt an den vielen Sonderzeichen, oder?
-
Na dann wollen wir doch auch noch mal klugscheißen: SHFileOperation(). :p da ist schon alles dabei, Fortschrittsanzeige, Abbrechen-Schaltfläche, Animation, ...
-
Luckie: Ich hab in der MSDN keine Möglichkeit gefunden, mit dieser Funktion eine Datei auszulesen.
Copies, moves, renames, or deletes a file system object.
-
Um es jetzt mal auf den Punkt zu bringen: Woran scheitert das auslesen einer Datei mit ReadFile() und womit kann ich sie dann auslesen, wenn nicht mit ReadFile() wenn ich bei den WinApi-Funktionen bleiben will und nicht auf die C-File-Pointer verfallen will
-
Guest2891 schrieb:
Ich hab das hier noch drangehängt, weil dieser Thread ziemlich genau meinem Problem entsprach.
Aber nochmal zu ReadFile(): Wenn ich damit eine exe-Datei auslese, geschieht das nicht in den Packeten, die ich als Parameter angegeben habe. Ich nehme an, das liegt an den vielen Sonderzeichen, oder?Mit Packeten - meinst Du damit Bytes ?
Was liefert ReadFile() denn zurück ?
bzw. was liefert GetLastError() ?ReadFile() weiss gar nicht was nen Sonderzeichen ist, es liest einfach nur nNumberOfBytesToRead Bytes ein und fertig...
-
Ok, es liegt daran, dass in Exe-Dateien "\x00"s enthalten, was das heißt, muss ich glaub ich keinem erklären..
Hab es jetzt so gebaut:
unsigned long written;int inBuffer[1024]; ReadFile(hFile, (char*) inBuffer, 1024, &written, NULL);
Danke an alle
-
Möchte noch jemand etwas Senf?
Nenn die Variable read und nicht written, denn es werden keine Bytes auf die Platte geschrieben.
-
Ok, Variable ist umbenannt...
Ich lese die exe-Datei aus, um sie dann zu senden... Doch die Ausleseroutine arbeitet noch nicht immer perfekt, meistens wird zu wenig gesendet
int inBuffer[LENGTH_FOR_SEND]; ZeroMemory(inBuffer, LENGTH_FOR_SEND); unsigned long nBytesRead = 0; HANDLE hFile; hFile = CreateFile(Pfad.c_str(), FILE_READ_DATA, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == NULL) return false; while(true) { ReadFile(hFile, (char*) &inBuffer, LENGTH_FOR_SEND + strlen(size), &nBytesRead, NULL); if(nBytesRead < 1) break; MessageBox(NULL, (char*) inBuffer, "Information", MB_ICONINFORMATION); if(nBytesRead % LENGTH_FOR_SEND == 0) send(sock, (const char*) inBuffer, LENGTH_FOR_SEND, 0); else send(sock, (const char*) inBuffer, LENGTH_FOR_SEND % nBytesRead, 0); ZeroMemory(inBuffer, LENGTH_FOR_SEND); } CloseHandle(hFile);
Sieht jemand einen Fehler?
Danke
Remote Viewer
-
Ich verstehe das nich ganz: was ist size?
Du liest doch LENGTH_FOR_SEND + strlen(size) Bytes aus, sendest aber immer max. LENGTH_FOR_SEND Bytesif(nBytesRead % LENGTH_FOR_SEND == 0) send(sock, (const char*) inBuffer, LENGTH_FOR_SEND, 0); else send(sock, (const char*) inBuffer, LENGTH_FOR_SEND % nBytesRead, 0);
Angenommen LENGTH_FOR_SEND ist 1024 und nBytesRead 980, so wurden doch 980 Bytes gelesen, du sendest aber nur 44 (1024%980). Warum dann nicht einfach so:
send(sock, (const char*) inBuffer, nBytesRead, 0);
Hab schon ewig nicht mehr C/C++ gecodet, also Fehler in keinster Weise ausgeschlossen