Entwickler-Ecke
IO, XML und Registry - Datenströme von Detein
Skiller-1988 - Do 21.08.08 10:03
Titel: Datenströme von Detein
Ich versuche ein Programm zu schreiben, wo ich den Pfad einer Datei belibigenformates angeben kann und mir dann daraufhinn in einer Textbox der Datenstrom angezeigt wird. Der Datenstrom sollte in Hexadezimal oder Binärformat sein.
Ich habe jetzt schon unzählige versuche mit den Streamread, Stream, Filestream, Binaryreader durch komme aber zu keinen Ergebniss.
Hat jemand eine Idee?
lothi - Do 21.08.08 10:06
Hallo
Einer hast du noch vergessen:
MemoryStream
Gruss Lothi
Skiller-1988 - Do 21.08.08 10:13
Ja den habe ich bewusst rausgelassen in meiner Aufzählung, weil ich denke das der doch eigentlich nur für Datenströme zwischen Arbeitspeicher und Programm zuständig ist und ich ja die "Datenströme" von Datein haben will die auf einer Festplatte gepeichert sind.
Christian S. - Do 21.08.08 11:05
Hallo!
Der FileStream ist schon richtig. Wie sah denn Dein Versuch da aus und wo hat's nicht geklappt?
Grüße
Christian
Skiller-1988 - Do 21.08.08 12:00
Naja das ganze funktioniert schon soweit ich das getestet habe mit textdatein aber mit anderen Datein funktioniert das noch nicht so gut. :(
Weil das ja eigentlich alles bytzahlen sind und nicht die Binäre bzw. Hexadezimale darstellung des Filestreams. (ich weis das man das auch umrechnen kann)
Ich möchte viel ehre die unveränderte darstellung des Filestreams.
Das habe ich momentan:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| FileStream fs = new FileStream(textBox2.Text, FileMode.Open, FileAccess.Read); FileInfo fi = new FileInfo(textBox2.Text); byte[] arrbyte = new byte[fi.Length];
fs.Read(arrbyte, 0, Convert.ToInt32(fi.Length));
for (int i = 0; i < fi.Length; i++) { textBox1.Text += arrbyte[i] + " "; } fs.Close(); |
Moderiert von
Christian S.: I- durch C#-Tags ersetzt
lothi - Do 21.08.08 12:07
Hallo Skiller
Empfehlung Nr. 1 nimm den StringBuilder zum verknüpfen des Textes. fi kann ziemlich gross werde.
Dann nimmst du sb.AppendFormat("{0:X2}",arrbyte[i]);
dann
textbox1.Text = sb.ToString();
Wenn du mit grossen Datenmengen zu tun hast nimm BeginRead so wird das ganze Asynchron ausgeführt.
Gruss Lothi
Christian S. - Do 21.08.08 12:09
Zusätzlich zu dem was lothi schrieb:
(1) Benutze die using-Anweisung. Außerdem kannst Du das Öffnen auch kürzer haben:
C#-Quelltext
1: 2: 3: 4:
| using(FileStream fs = File.OpenRead(textBox2.Text)) {
} |
Das
fs.Close() kannst Du Dir dann sparen.
(2) Du brauchst keine
FileInfo um die Länge des Streams zu kennen. Ein FileStream hat selber eine
Length-Eigenschaft.
Skiller-1988 - Do 21.08.08 12:10
Ja danke für die tollen tipps, allerdings geht es mir hier nicht um Performance, ich kenne die sachen die du genannt hast auch bereits wichtiger wäre erstmal eine Lösung meines Problems. (was nicht heißen sll das ich nicht dankbar für die Tipps wäre)
Christian S. - Do 21.08.08 12:12
Skiller-1988 hat folgendes geschrieben: |
Ja danke für die tollen tipps, allerdings geht es mir hier nicht um Performance, ich kenne die sachen die du genannt hast auch bereits wichtiger wäre erstmal eine Lösung meines Problems.(was nicht heißen sll das ich nicht dankbar für die Tipps wäre) |
Die Lösung steht in Lothis Posting!
lothi hat folgendes geschrieben: |
Dann nimmst du sb.AppendFormat("{0:X2}",arrbyte[i]); |
Skiller-1988 - Do 21.08.08 12:20
Ok die sachen sind mir zwar bekannt aber ich habe in dem Fall nicht auf die Performance Wertgelegt da es zunächst nur ein Test ist. Trozdem danke für eure Tipps habe es jetzt auch geändert.
Skiller-1988 - Do 21.08.08 12:22
OK dann bedanke ich mich erstmal für die schnelle hilfe.
lothi - Do 21.08.08 12:36
Geht auch so:
C#-Quelltext
1:
| textBox1.Text += String.Format(" {0:X2} ",arrbyte[i]); |
//edit: Klammer vergessen
Gruss Lothi
Christian S. - Do 21.08.08 12:43
Oder:
C#-Quelltext
1:
| textBox1.Text += arrbyte[i].ToString("X2"); |
;-)
lothi - Do 21.08.08 13:29
Richtig Christian und das alles ohne das der Code optimiert wurde. :lol: 8)
Skiller-1988 - Do 21.08.08 15:24
habe doch noch eine frage gibt es auch ein formatierungszeichen für das Binär Format? (so wie das X für Hexadezimale ausgabe steht)
lothi - Do 21.08.08 15:35
Hallo
probier mal:
Convert.ToString(deineZahl, 2);
Wobei DeineZahl eine Dezimal Zahl sein sollte.
Gruss Lothi;
Skiller-1988 - Fr 22.08.08 07:02
Ok es fuktioniert danke nochmal. :D
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!