Einzelnen Beitrag anzeigen

Benutzerbild von F.W.
F.W.

Registriert seit: 28. Jul 2003
Ort: Zittau
636 Beiträge
 
#12

Re: Datei lesen auf "einmal"

  Alt 27. Apr 2006, 22:39
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!
  Mit Zitat antworten Zitat