![]() |
ReadFile, SetFilePointer: dwBytesWritten nach der Hälfte 0
Hey,
ich versuche eine Datei Stückweise auszulesen und dann über die Sockets zu verschicken (PacketSize = 512kb):
Delphi-Quellcode:
Korrekt berechnet wird alles. Bei meiner Testdatei ergeben sich 14 Pakete. Bei den ersten 7 davon, funktioniert auch alles perfekt, ab dann gibt ReadFile zwar true zurück, BytesRead allerdings ist immer 0. Dementsprechend können meine Pakete nicht richtig verschickt werden ..
NumPackets := Size div PacketSize;
if (Size mod PacketSize > 0) then begin Inc(NumPackets); end; hFile := CreateFile(PChar(Filename), GENERIC_READ, FILE_SHARE_READ, nil, OPEN_EXISTING, 0, 0); if (hFile <> 0) and (hFile <> INVALID_HANDLE_VALUE) then begin SetFilePointer(hFile, 0, nil, FILE_BEGIN); // Daten senden try GetMem(Buffer, PacketSize); try for I := 0 to NumPackets - 1 do begin if ReadFile(hFile, Buffer^, PacketSize, BytesRead, nil) then begin if (I = (NumPackets -1)) then begin SendSimplePacketEx(Buffer, BytesRead, Encrypt, Compress, Flags or DFLAG_SEQUENCE_END); end else begin SendSimplePacketEx(Buffer, BytesRead, Encrypt, Compress, Flags); end; end; SetFilePointer(hFile, PacketSize, nil, FILE_CURRENT); end; finally FreeMem(Buffer); end; finally CloseHandle(hFile); end; end; Irgendjemand eine Idee woran das liegen könnte? Gruß Zacherl |
Re: ReadFile, SetFilePointer: dwBytesWritten nach der Hälfte
ReadFile setzt den File Pointer schon neu, also liest du 512kb und überspringst 512kb pro Iteration.
|
Re: ReadFile, SetFilePointer: dwBytesWritten nach der Hälfte
Ahh sowas simples. Dankeschön :)
|
Re: ReadFile, SetFilePointer: dwBytesWritten nach der Hälfte
Zitat:
aber normal schon :angel2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz