Hallo zusammen,
ich habe ein ziemlich großes
XML File, welches ich mittels MMF häppchenweise einem
SAX Parser unterschieben möchte. D.h. der
SAX Parser bekommt einen Puffer und geht dann Char für Char weiter beim Parsen. Den Puffer möchte ich aus einem MMF bedienen, so dass nicht immer das komplette File in den
RAM geladen wird. Ich habe mir dazu mal 2 Methoden erstellt, die rudimentär den Zugriff machen sollen.
Mein Problem ist, dass hFile immer 0 ist. Woran könnte es liegen?
Danke+Gruß,
Christoph
Delphi-Quellcode:
function TForm1.ReadFromMMF(Filename: PChar; Len: Int64): Pointer;
var
hFile: Cardinal;
begin
hFile := CreateFileMapping($FFFFFFFF,
nil, PAGE_READONLY, 0, Len, Filename);
// das geht immer schief, file existiert aber auf platte!
if hFile <> 0
then
begin
try
Result := MapViewOfFile(hFile, FILE_MAP_READ, 0, 0, 0);
finally
//CloseHandle(hFile);
end;
end
else
begin
Result :=
nil;
end;
end;
procedure TForm1.btn1Click(Sender: TObject);
var
CurrTxt: PChar;
FileName, Msg:
string;
begin
// lade xml file..
FileName := ExtractFilePath(Application.ExeName) +'
liste_cmg.xml';
CurrTxt := Self.ReadFromMMF(PChar(FileName), 2000);
// nachfolgend nur dummycode, später zuweisung auf buffer des SAX Parsers
if Assigned(CurrTxt)
then
begin
StrLCopy(PChar(Msg),CurrTxt, 10);
ShowMessage(Msg);
// CopyMemory(CurrTxt, Data, Len);
end;
end;