Entwickler-Ecke
Dateizugriff - FileStream "sichtbar" machen
GR-Thunderstorm - So 05.10.08 19:23
Titel: FileStream "sichtbar" machen
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 - So 05.10.08 19: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 - So 05.10.08 19: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 - So 05.10.08 19: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? :roll:
jaenicke - So 05.10.08 20: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 - So 05.10.08 21: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 - So 05.10.08 21: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:
http://www.delphi-forum.de/viewtopic.php?t=36173
Delete - Mo 06.10.08 08: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.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!