Autor |
Beitrag |
creeky
Hält's aus hier
Beiträge: 7
|
Verfasst: So 06.02.05 15:35
Hallo,
ich möchte mir ein kleines Tool schreiben, mit dem ich jegliche Art von Dateien Binär auslesen kann.
Genauer gesagt will ich (rein Interesse halber) die einzelnen Speicherblöcke der Datei als Binör-Code ausgeben lassen.
Wie lässr sich dies realisieren.
Ich wäre über schnelle Antwort erfreut.
creeky
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: So 06.02.05 15:39
Hallo!
Einzelne Speicherblöcke? eine Datei ist erstmal nichts weiter als eine abgegrenzte Abfolge von Bytes, die nicht weiter segmentiert ist. Zumindest nicht auf logischer Seite. Wie das BS die Datei auf der HD ablegt, das ist eine andere Geschichte.
Benutze einfach einen FileStream, der eben die Daten byteweise ausliest. Siehe Delphi-Hilfe zu TFileStream.
Cu,
Udontknow
|
|
creeky 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 06.02.05 16:06
Okay, ich habe mich falsch ausgedrückt.
Da ich noch Neuling in Sachen Delphi bin, könntet ihr mir bitte genauere Anweisungen oder Links geben.
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: So 06.02.05 16:47
Hier mal der Code, um die einzelnen Byte-Werte in ein Memo zu schreiben:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| procedure TForm1.DumpFileToMemo(FileName:String); var Stream:TFileStream; var Str:String; var B:Byte; begin Stream:=TFileStream.Create(FileName,fmOpenRead); try Str:=''; While Stream.Position<Stream.Size do begin Stream.ReadBuffer(B,SizeOf(B)); Str:=Str+IntToStr(B)+'-';
if Stream.Position mod 10 = 9 then begin Memo1.Lines.Add(Str); Str:=''; end; end; finally Stream.Free; end; end; |
Cu,
Udontknow
|
|
creeky 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 06.02.05 17:15
Danke.
Zitat: | if Stream.Position mod 10 = 9 then |
Da hast dich glaub verschrieben. Muss doch so heißen:
Delphi-Quelltext 1:
| if Stream.Position mod 10 = 0 then |
Ich versteh das schon richtig, dass ich jetzt das Ganze noch in Binär-Code umwandeln muss.
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
|
|
creeky 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 06.02.05 18:31
Vielen Dank für den Quellcode.
Ich habe nur noch ein Problem. Wenn ich größere Dateien öffnen möchte (z.B. mp3-Dateien) dann stürzt das Programm ab. An was liegt das? wie kann ich das ändern?
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: So 06.02.05 18:50
creeky hat folgendes geschrieben: | Ich habe nur noch ein Problem. Wenn ich größere Dateien öffnen möchte (z.B. mp3-Dateien) dann stürzt das Programm ab. An was liegt das? wie kann ich das ändern? |
vielleicht daran dass gewisse binärzeichen für systemdinge reserviert sind und beim versuch diese darzustellen ein fehler auftritt. rein theoretisch sollte der fehler bei fast jeder nicht-textdatei auftreten
|
|
creeky 
Hält's aus hier
Beiträge: 7
|
Verfasst: So 06.02.05 19:24
Und dies lässt sich nicht irgendwie umgehen?
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: So 06.02.05 19:27
retnyg hat folgendes geschrieben: | creeky hat folgendes geschrieben: | Ich habe nur noch ein Problem. Wenn ich größere Dateien öffnen möchte (z.B. mp3-Dateien) dann stürzt das Programm ab. An was liegt das? wie kann ich das ändern? |
vielleicht daran dass gewisse binärzeichen für systemdinge reserviert sind und beim versuch diese darzustellen ein fehler auftritt. rein theoretisch sollte der fehler bei fast jeder nicht-textdatei auftreten |
das glaube ichnicht Tim. Ich kann mit meinem HexLoader: www.luckie-online.de...tiges/HexLoader.html jeder Dastei binär in einem Memo darstellen. Hex-Editoren können das ja auch.
|
|
retnyg
      
Beiträge: 2754
SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
|
Verfasst: So 06.02.05 19:58
aber gewisse zeichen wie #13 #10 #9 usw werden auch als solche interpretiert -> linefeed z.b.
um dies zu umgehen muss man diese zeichen "ausfiltern"
|
|
Udontknow
      
Beiträge: 2596
Win7
D2006 WIN32, .NET (C#)
|
Verfasst: Mo 07.02.05 09:19
Nun, es werden ja nicht die Zeichen ins Memo geschrieben, sondern die dezimalen Werte.
Delphi-Quelltext
Wobei mein Code wirklich noch etwas fehlerhaft ist, da er unter Umständen die letzten Zeichen einer Datei nicht zeigt. Abstürzen sollte es aber nicht, obwohl es äusserst unperformant ist. Es sollte ja auch nur demonstrieren, wie es geht.
Edit: Was für ein BS hast du? Unter Win95 war die Menge, die ein Memo aufnehmen konnte, begrenzt, meine ich mich zu erinnern...
Cu,
Udontknow
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Mo 07.02.05 12:36
Da der Threadstarter wohl nicht selber dazu in der Lage ist, mache ich es mal. Das ganze wird asuch parralle in der DP diskutiert und dort habe ich meinen Code für meinen Hex-Loader gepostet: www.luckie-online.de...tiges/HexLoader.html
|
|