Zitat von
Muetze1:
Zitat von
Daniel G:
Allerdings bekomme ich bei der großen 4 GB Datei den E/A-Fehler 998.
Bei Dateien/Adressen größer 2 GB die in einer vorzeichenbehafteten Variablen abgelegt werden, ist das Vorzeichen gesetzt. Dadurch können Adress- und Dateioperationen eine falsche Richtung einschlagen. Vielleicht mal in die Richtung schauen.
Hi,
Ja, zum Debuggen war mir das gestern zu spät.
Ich habe mal geguckt, er hängt bei dieser Funktion:
Delphi-Quellcode:
FUNCTION TXmlParser.LoadFromFile (Filename : STRING; FileMode : INTEGER = fmOpenRead OR fmShareDenyNone) : BOOLEAN;
// Loads Document from given file
// Returns TRUE if successful
VAR
f : FILE;
ReadIn : INTEGER;
OldFileMode : INTEGER;
BEGIN
Result := FALSE;
Clear;
// --- Open File
OldFileMode := SYSTEM.FileMode;
TRY
SYSTEM.FileMode := FileMode;
TRY
AssignFile (f, Filename);
Reset (f, 1);
EXCEPT
EXIT;
END;
TRY
// --- Allocate Memory
TRY
FBufferSize := Filesize (f) + 1;
GetMem (FBuffer, FBufferSize);
EXCEPT
Clear;
EXIT;
END;
// --- Read File
TRY
BlockRead (f, FBuffer^, FBufferSize, ReadIn); //<= DORT. Der Wert von FBufferSize ist durch den Integerüberlauf negativ.
(FBuffer+ReadIn)^ := #0; // NULL termination
EXCEPT
Clear;
EXIT;
END;
FINALLY
CloseFile (f);
END;
FSource := Filename;
Result := TRUE;
FINALLY
SYSTEM.FileMode := OldFileMode;
END;
END;
Ich werde mal gucken, was es für Lösungen zu diesem Problem im Forum gibt, aber ich denke mal, ich bräuchte irgendwie angepasste Funktionen von FileSize und BlockRead, die eben nicht den Integer nutzen, sondern einen größeren Datentyp.
Gruß,
Daniel