Autor Beitrag
matt
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Do 12.06.03 15:19 
Ich möchte den Inhalt einer Datei hexadezimal in einem RichEdit anzeigen. Dazu habe ich folgendes programmiert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
  
var
  File1 : File;
  Buf1 : Array[1..2048] of Byte;
  NumRead1 : Integer;
...
  repeat
    BlockRead(File1, Buf1, SizeOf(Buf1), NumRead1);
    for i:=1 to NumRead1
    do RichEdit1.SelText := IntToHex(Buf1[i], 2) + ' ';
  until NumRead1 = 0;


Das funktioniert soweit auch ganz gut, nur bei großen Dateien dauert das Einlesen ewig. Da muss es doch noch was besseres geben...
CenBells
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1547

Win 7
Delphi XE5 Pro
BeitragVerfasst: Do 12.06.03 17:07 
hallo, das das ewig dauert ist auch relativ klar. Du lädst immerhin die gesamte datei in den speicher.
Du solltest dir da mal MemoryStreams näher anschauen, so daß du am besten immer nur einen gewissen teil auslesen musst...

Gruß
Ken
matt Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 13.06.03 07:42 
Hmm, mit MemoryStreams habe ich auch schon experimentiert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  m1 : TMemoryStream;
begin
  m1 := TMemoryStream.Create;
  try
    m1.LoadFromFile(OpenDialog1.FileName);
    RichEdit1.Text := String(m1.Memory);    //???
  finally
    m1.free;
  end;
end;


Das geht auch alles recht fix. Nur leider habe ich keine Lösung gefunden, um die Daten hexadezimal anzuzeigen. Mit der Typumwandlung nach String kann ich das RichEdit zwar füllen, aber eben nur mit ASCII-Zeichen...
matt Threadstarter
Hält's aus hier
Beiträge: 9



BeitragVerfasst: Fr 13.06.03 07:43 
Hmm, mit MemoryStreams habe ich auch schon experimentiert:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var
  m1 : TMemoryStream;
begin
  m1 := TMemoryStream.Create;
  try
    m1.LoadFromFile(OpenDialog1.FileName);
    RichEdit1.Text := String(m1.Memory);    //???
  finally
    m1.free;
  end;
end;


Das geht auch alles recht fix. Nur leider habe ich keine Lösung gefunden, um die Daten hexadezimal anzuzeigen. Mit der Typumwandlung nach String kann ich das RichEdit zwar füllen, aber eben nur mit ASCII-Zeichen...