![]() |
function Read(var Buffer; Count: Longint): Longint; override;
Sagt meine Hilfe. Aber dein Buffer ist ein String. Also erst mal mit Zahlen arbeiten, und dann in String umwandeln, oder TextFile nehmen. |
Liste der Anhänge anzeigen (Anzahl: 2)
Mit dem Datentyp hatte ich mich geirrt, es ist ein Longint.
Code:
Das hier funktioniert zwar bei Textdateien, ich will aber auch, wie Notepad, binäre Dateien wie z.B. exe oder gif-Dateien öffnen können.
Memo1.Lines.LoadfromFile('c:\Test.txt');
Der Tip mit buffer[1] hat mir sehr geholfen, auch dieser funzt mit Textfiles wunderbar, aber wie das mit einer Gif-Datei aussieht, könnt ihr im Anhang bestaunen :zwinker: ... Die Screenshots sind von einem Programmablauf mit folgendem Code entstanden:
Code:
Der Dateiname, der in dem Screenshot ständig zu sehen ist, ist der des gif-Bildes.
const
count = 1024; var datei: tfilestream; buffer: string; r: longint; begin if opendialog1.Execute then begin datei := tfilestream.Create(opendialog1.FileName,fmopenread or fmsharedenynone); setlength(buffer,count); repeat r := datei.Read(buffer[1],sizeof(buffer)); memo1.Text := memo1.Text + buffer; //showmessage(inttostr(r)); until (r < sizeof(buffer)); datei.Free; end; end; |
So, lieber Braincode, teste mal den folgenden Code:
Delphi-Quellcode:
sollte eigentlich jede Datei brav einlesen. Nur nicht Count auf 0 stellen, oder andere idiotische Sachen. Ähm, so Sachen wie Fortschrittsanzeige oder so, kann man wenn man Lust hat auch noch einbauen.
procedure TForm1.Button2Click(Sender: TObject);
const Count = 1024; var Datei: TFileStream; Buffer: array[0..(Count-1)] of Char; l,i: Word; Result: TCaption; begin if not OpenDialog1.Execute then Exit; Memo1.Clear; Result := ''; Datei := TFileStream.Create(OpenDialog1.FileName, fmOpenRead); try while true do begin l := Datei.Read(Buffer, Count); if l <> Count then begin if not (l = 0) then for i := 0 to (l - 1) do Result := Result + Buffer[i]; Break; end; Result := Result + Buffer; end; finally Datei.Free; end; Memo1.Text := Result; end; PS: nochmal zu deinem Ursprungscode:
Delphi-Quellcode:
Scheint mir ein wenig verdächtig.
r := datei.Read(buffer[1],sizeof(buffer));
Edit: ich nenne nie mehr eine Variable "l" (kleines L) das ist ja schlimm zu lesen, wenn die Zahlen keine andere Farbe bekommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 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-2025 by Thomas Breitkreuz