Autor |
Beitrag |
GR-Thunderstorm
      
Beiträge: 206
|
Verfasst: So 05.10.08 20:23
Ich versuche grade auf ganz simple Weise einen FileStream irgendwie sichtbar zu machen.
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; 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
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 05.10.08 20:34
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; end;
procedure TForm1.DialogCanClose(Sender: TObject; var CanClose: Boolean); var puff:String; begin Stream:=TFileStream.Create(Diag.FileName,fmOpenRead or fmShareDenyWrite); SetLength(puff, Stream.Size);
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 
      
Beiträge: 206
|
Verfasst: 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.
Auch bei nem 100KiB großen JPG-Bild lädt er sich tot.
Woran kann das liegen?
|
|
Yogu
      
Beiträge: 2598
Erhaltene Danke: 156
Ubuntu 13.04, Win 7
C# (VS 2013)
|
Verfasst: So 05.10.08 20:51
GR-Thunderstorm hat folgendes geschrieben : | 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? 
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 206
|
Verfasst: 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
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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
|
Verfasst: Mo 06.10.08 09:36
GR-Thunderstorm hat folgendes geschrieben : | 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.
|
|