Die Datei öffnen und einlesen


Bleiben wir bei dem Beispiel, dass wir eine Datei mit dem Öffnen-Dialog ausgewählt haben und nun im Eingabefeld unseres Mini-Editors anzeigen möchten. Dazu holen wir uns zunächst ein Handle auf die Datei und fordern Speicher an:

hFile := CreateFile(buffer, GENERIC_READ  or GENERIC_WRITE,
  FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL, 0);
{ Speicher anfordern } hMemory := GlobalAlloc(GMEM_MOVEABLE or GMEM_ZEROINIT, MEMSIZE);

Wenn das erledigt ist, holen wir uns die Adresse des ersten Bytes des eben angelegten Speicherobjektes

pMemory := GlobalLock(hMemory);

lesen die Datei und übertragen Sie mit "WM_SETTEXT" in unser Eingabefeld:

ReadFile(hFile, pMemory^, MemSize-1, SizeReadWrite, nil);
SendMessage(Edit, WM_SETTEXT, 0, Integer(pMemory)); SendMessage(Edit, EM_SETSEL, 0, 0);

Und zum Schluss wird aufgeräumt:

CloseHandle(hFile);
GlobalUnlock(CARDINAL(pMemory));
GlobalFree(hMemory);


Zum Lesen der Daten (in dem Fall max. 64k) benutzen wir die Funktion ReadFile. Von besonderer Bedeutung ist lpNumberOfBytesRead (im Code: "SizeReadWrite"). Er liefert uns die Anzahl der tatsächlich gelesenen Bytes zurück. Zwar wird dieser Wert im Beispiel nicht weiter beachtet, aber er kann in Ihren Programmen der Fehlerkontrolle dienen.