Autor Beitrag
GR-Thunderstorm
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: So 05.10.08 20:23 
Ich versuche grade auf ganz simple Weise einen FileStream irgendwie sichtbar zu machen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Dialog.Execute; //Dialog ist ein TOpenDialog
end;

procedure TForm1.DialogCanClose(Sender: TObject;
  var CanClose: Boolean);
  var puff:String;
begin
  Stream:=TFileStream.Create(Diag.FileName,fmOpenRead or fmShareDenyWrite);
  Stream.Read(puff,Stream.Size);
  Edit1.Text:=puff;
  Edit2.Text:=IntToStr(Stream.Size);
  Stream.Free;
end;


Über nen TOpenDialog rufe ich ganz einfach ne Datei auf und versuche deren Inhalt dann in nen Puffer zu laden und anzuschauen.
Leider bleibt Edit1 leer, während Edit2 ganz korrekt die Größe in Byte zeigt.
Woran könnte das liegen?

Edit: Wenn ich die Variable "Puff" vom Typ Integer mache, hat diese allerdings einen Zahlenwert.
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 05.10.08 20:34 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Dialog.Execute; //Dialog ist ein TOpenDialog
end;

procedure TForm1.DialogCanClose(Sender: TObject;
  var CanClose: Boolean);
  var puff:String;
begin
  Stream:=TFileStream.Create(Diag.FileName,fmOpenRead or fmShareDenyWrite);
  
  // Den String so groß wie die Datei machen
  SetLength(puff, Stream.Size);

  // Den gesamten Stream in den String lesen
  Stream.Read(PChar(puff)^, Length(puff));
  
  Edit1.Text:=puff;
  Edit2.Text:=IntToStr(Stream.Size);
  Stream.Free;
end;

Zuerst setzen wir die Größe des Strings, dann lesen wir in ihn hinein. Das PChar(puff)^ ist notwendig, da String eigentlich ^array of Char heißen müsste - ein String ist ein Zeiger. Wir müssen ihn in einen "richtigen" Zeiger (PChar) umwandeln.
GR-Thunderstorm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: So 05.10.08 20:48 
OK cool, das hat funktioniert. Allerdings hab ich noch nie die größe eines Strings vorher festlegen müssen. :?!?:

Als ich ein 1.3MiB großes Bild einlesen wollte, gabs nen riesen Freeze und mein Vista Farbschema hat sich geändert. :shock: :D
Auch bei nem 100KiB großen JPG-Bild lädt er sich tot.

Woran kann das liegen?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 05.10.08 20:51 
user profile iconGR-Thunderstorm hat folgendes geschrieben Zum zitierten Posting springen:
Auch bei nem 100KiB großen JPG-Bild lädt er sich tot.

Woran kann das liegen?

Das sind immerhin 100.000 Zeichen, die alle in ein Edit-Feld müssen. Dafür sind die einfach nicht ausgelegt. Wie wär's mal mit einer etwas kleineren Datei? :roll:
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.10.08 21:31 
Was hast du denn eigentlich vor? Ich meine, es gibt zum Beispiel Komponenten zur hexadezimalen Darstellung von Dateien, etc.
Diese wären hier vielleicht besser geeignet, denn sie sind auch bei größeren Dateien schnell genug.
GR-Thunderstorm Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 206



BeitragVerfasst: So 05.10.08 22:45 
Ich wollte einfach nur meinen Horizont etwas erweitern, da ich noch nie mit FileStreams gearbeitet habe. Ich hatte mir erhofft, so ein paar Dateien auseinander zu nehmen und zu schauen, wie die denn so aufgebaut sind. ^^
Ich hab anstelle des ganzen Streams jetzt nurmal die ersten 10 Bytes oder so in den Puffer gelesen. Was ich komisch finde ist, dass ich bei Bildern und so trotzdem nur nen haufen kryptischer Zeichen vor mir sehe, als wenn ich die in Notepad öffnen würde. :? Ich dachte, auf diese Weise würde man alles in "richtigen" Buchstaben und Zahlen sehen können.
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19312
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: So 05.10.08 22:57 
Solche Dateien sind eben Binärdateien, den Aufbau kannst du selbst kaum analysieren, es gibt im Internet Beschreibungen von vielen Dateiformaten.
Zum Anschauen eignet sich eher ein Hex-Viewer wie dieser:
www.delphi-forum.de/viewtopic.php?t=36173
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 06.10.08 09:36 
user profile iconGR-Thunderstorm hat folgendes geschrieben Zum zitierten Posting springen:
Ich hatte mir erhofft, so ein paar Dateien auseinander zu nehmen und zu schauen, wie die denn so aufgebaut sind. ^^

Da wirst du mit einer Stringdarstellung in einem Edit nicht weitkommen, da solche Dateien auch Steuerzeichen und andere für ein Edit nicht darstellbare Zeichen enthalten. Du musst wenn dann schon die Bytes in ihrer numerischen Darstellung anzeigen. Üblicherweise wählt man da hexadezimal darstellung, wie sie auch von HexEditoren verwendet wird.

@jaenicke: Mit dem entsprechendem Aufwand an Zeit und Mühe kann man schon ziemlich viele Dateien analysieren und zerlegen. Ich würde mit irgendwas einfachen anfangen, Bitmaps oder so.