![]() |
ReadFile liest nicht die ganze Datei
Hi Leute,
mein Problem hab ich im source code beschrieben. Hoffe ihr könnt mir helfen :wink:
Delphi-Quellcode:
Vielen dank schonmal im voraus.
//Beispielcode
//APIs.GetFileSize nutzt in dem Fall FindFirstFile um Größe der Datei zu erhalten (funktioniert) var Buffer: pchar; i64: int64; hHandle: integer; lpNumberOfBytesRead: cardinal; begin i64 := APIs.GetFileSize(ExtractFilePath(ParamStr(0)) + 'Skin.cont'); hHandle := // FileHandle CreateFile(pChar(ExtractFilePath(ParamStr(0)) + 'Skin.cont'), GENERIC_READ, FILE_SHARE_READ, Nil, OPEN_EXISTING, 0, 0); SetFilePointer // Pointer um von Anfang an zu lesen (hHandle, 0, 0, FILE_BEGIN); GetMem(Buffer, i64); ReadFile(hHandle, Buffer^, i64, lpNumberOfBytesRead, NIL); FreeMem(Buffer, i64); //Breakpoint end; //Problem: lpNumberOfBytesRead sagt mir, dass es die volle Byte Zahl gelesen hat, // jedoch ist nur ein geringer Teil (Anfang der Datei) im Buffer, wenn ich am Breakpoint mir den Buffer anzeigen lasse. |
Re: ReadFile liest nicht die ganze Datei
Bist du die sicher, daß nicht nur ein Teil angezeigt wird?
|
Re: ReadFile liest nicht die ganze Datei
Ich bin mir insofern sicher, dass nicht nur ein teil angezeigt wird, weil Length(Buffer) auch nur die anzahl an zeichen ergibt, die mir delphi anzeigt.
|
Re: ReadFile liest nicht die ganze Datei
Schreibe mal die volel Anzahl bytes in einen andere datei und vergleiche sie mit der ursprünlichen.
|
Re: ReadFile liest nicht die ganze Datei
PChar => er beachtet das Nullbyte. Daher wird der hint an einem solchen abgeschnitten, somit zeigt er dir zu wenig an. Length() wiederrum wird den PChar als String übergeben bekommen und diese Konvertierung beachtet genauso das Nullbyte. Entweder benutzt du einen allgemeineren Datenzeiger-Typ oder du schaust dir den Inhalt mit Routinen an, welche sich auf die wahre Länge verlassen. Wenn ReadFile() sagt er habe soviel gelesen, dann hat er es auch.
Ansonsten: afaik ist die Dateiposition nach dem Öffnen immer bei Offset 0. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:17 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