![]() |
Datei auslesen mit FileStream
Hi,
meine Leitung is mal wieder zu lange... Ich hab schon im Forum gesucht, auch Sachen gefunden, aber auf den grünen Zweig bin ich noch nicht gekommen. Also, ich möchte eine Datei mit einem FileStream auslesen (ich denke das ist schneller, als alles in eine StringList zu schreiben und dann auslesen) und dann in ein RichEdit schreiben. Hier mal meine Procedure:
Delphi-Quellcode:
Ich bekomm aber eine Zugriffverletzung, obwohl die Datei 100% nicht in Benutzung ist.
var
FS: TFileStream; I: Integer; Buffer: String; begin if dOpen.Execute then begin if dOpen.Files.Count > 0 then begin for I := 0 to dOpen.Files.Count - 1 do begin FS := TFileStream.Create(dOpen.Files[I], fmOpenRead + fmShareDenyRead); //<-- Hier ist eine AV try FS.ReadBuffer(Buffer, SizeOf(Buffer)); case GetDoc.FEditor of etRichText: GetDoc.RichEdit.SelText := Buffer; etCode: GetDoc.Code.SelText := Buffer; end; finally FS.Free; end; end; end else begin FS := TFileStream.Create(dOpen.FileName, fmOpenRead + fmShareDenyRead); //<-- Hier ist eine AV try FS.ReadBuffer(Buffer, SizeOf(Buffer)); case GetDoc.FEditor of etRichText: GetDoc.RichEdit.SelText := Buffer; etCode: GetDoc.Code.SelText := Buffer; end; finally FS.Free; end; end; end; end; Ich denke ist so ein einfacher Fehler das ich ihn mal wieder nich finde :cry: |
Re: Datei auslesen mit FileStream
Was mir als erstes auffällt: verknüpf mal die Föags mit or.
Und dann: sizeof(Buffer) dürfte dir immer vier Bytes liefern, da ein String auch nur ein Zeiger ist. So sollte es gehen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var fs: TFileStream; Buffer: String; len: Cardinal; begin fs := TfileStream.Create('d:\Dokumente\Filme.txt', fmOpenRead); try len := fs.Size; SetLength(Buffer, len); try fs.ReadBuffer(Buffer[1], len); Memo1.Text := Buffer; except on E: EReadError do ShowMessage(E.Message); end; finally FreeAndNil(fs); end; end; |
Re: Datei auslesen mit FileStream
Hi Luckie,
thx :thumb: Klappt super^^. |
Re: Datei auslesen mit FileStream
Mit der Angabe sizeof(Buffer) bekommst du übrigens keine AV, sondern eben nur die ersten vier Zeichen eingelesen. Dein Fehler muss wo anders gesteckt haben.
|
Re: Datei auslesen mit FileStream
der fehler lag in der zeile
Delphi-Quellcode:
er hat wie schon erwähnt mit sizeof anstelle von length gearbeitet und bei buffer "[1]" vergessen
FS.ReadBuffer(Buffer, SizeOf(Buffer));
|
Re: Datei auslesen mit FileStream
Habe ich gar nicht gesehen. :? So was ist mir schon so in Fleisch und Blut übergegangen, dass ich bei so was gar nicht mehr nachdenken muss. :roll:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz