Registriert seit: 3. Sep 2004
4.629 Beiträge
Delphi 10.2 Tokyo Starter
|
ReadFile, SetFilePointer: dwBytesWritten nach der Hälfte 0
23. Jul 2009, 16:57
Hey,
ich versuche eine Datei Stückweise auszulesen und dann über die Sockets zu verschicken (PacketSize = 512kb):
Delphi-Quellcode:
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;
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 ..
Irgendjemand eine Idee woran das liegen könnte?
Gruß Zacherl
|
|
Zitat
|