Hallo,
ich muss für meine Anwendung mit sehr großen Dateien arbeiten (bis 4GB). Aus diesem Grund lade ich eine große
Datei als Memory Mapped File. Ich hab gelesen, dass das theoretisch bis 4 GB geht, aber man nur 2 GB nutzen kann, da das BS
sich die anderen 2GB reserviert. Mein Problem ist allerdings, dass ich auch schon ab einer 1 GB großen Datei Fehlermeldungen bekomme. Mit kleineren Files (ca. 100 MB) Dateien funktioniert aber prinzipiell alles prima. Hier mal der Code zum Öffnen einer Datei als MMF.
Hat jemand einen Ratschlag?
Delphi-Quellcode:
str:=VisuFilePath+VisuFileName+'
.dat';
{Variante mit Memory Mapped Files}
FileHandle := GetHandle(str);
//Fkt. um Handle zu erzeugen
if FileHandle = INVALID_HANDLE_VALUE
then
Raise exception.Create('
File could not be opened!');
FileSize := GetFileSize(FileHandle,
nil);
MapHandle := CreateFileMapping(FileHandle,
nil,PAGE_READONLY,0,0,
nil);
if MapHandle = 0
then begin
CloseHandle(FileHandle);
Raise Exception.Create('
Filemapping Error!');
end;
FData := MapViewOfFile(MapHandle,FILE_MAP_READ,0,0,0);
if FData =
nil then begin
CloseHandle(MapHandle);
Raise Exception.Create('
Filemapping Error!');
end;
FData ist der Pointer auf den Beginn des Speicherbereich in dem meine Daten liegen.
Bei meiner 1 GB großen Datei wird für FData allerdings nil zurückgeliefert. Probleme sollten doch aber erst ab ca. 2GB auftreten?
Gruß,
bono