Ich hab mal noch 2 Möglichkeiten (habe beide schnell hergeleitet, die Theorie sollte stimmen, evtl. Tippfehler ausbessern
1. Möglichkeit, mit einem Pointer:
Delphi-Quellcode:
procedure LoadFromFileComplete(const FN: TFileName);
var
Datei: Pointer; //sollte jenachdem ob du ihn in anderen functions und procedures brauchst evtl. global sein
FS: TFileStream;
begin
FS := TFileStream.Create(FN, fmOpenRead);
try
GetMem(Datei, FS.Size); //reserviert Speicher, der mit FreeMem() wieder freigegeben werden muss!
FS.ReadBuffer(Datei, FS.Size);
finally
FS.Free;
end;
end;
2. Möglichkeit mit nem TMemoryStream, hier bin ich mir ne so sicher, ob das alles so richtig oder wichtig ist
:
Delphi-Quellcode:
procedure LoadFromFileComplete(const FN: TFileName);
var
Datei: TMemoryStream;//sollte jenachdem ob du ihn in anderen functions und procedures brauchst evtl. global sein
//dann muss natürlich das Erzeugen und das Freigeben auch im OnCreate und im OnDestroy oder so passieren
FS: TFileSream;
begin
FS := TFileStream.Create(FN, fmOpenRead);
try
Datei := TMemoryStream.Create;
try
Datei.SetSize(FS.Size);//die zwei zeilen sind evtl. überflüssig
Datei.Seek(0, soFromBeginning);// ||
Datei.CopyFrom(FS, 0);//0 sollte für alles stehen
//wenn du darauf jetzt noch nen Pointer brauchst musst du dir einen deklarieren und mit Datei.Memory gleichsetzen
finally
Datei.Free;
end;
finally
FS.Free;
end;
end;
Aber die obere Methode sollte gehn!
PS: Solltest du mal große Dateien mit Streams bearbeiten bergiss nicht den Int64 statt nem Integer zu nehmen wenn du Längenangaben liest!