000
30.03.2005, 18:09 Uhr
~H. Meier
Gast
|
Hallo Forum,
so langsam füllt der "Neuling" das Forum mit seinen "dummen" Fragen :=( Sorry, aber evtl. lerne ich es ja noch irgendwann (die Hoffnug stirbt zuletzt...)... Mein aktuelles Probelm: ich habe jetzt zig Versionen ausprobiert um eine Datei zu öffnen und in Dateien zu schreiben. Leider wird meistens immer nur das Lesen und Schreiben von Zeilen behandelt. Dummerweise habe ich eine Datei ohne (!) CRLF, also "nur" eine Ansammlung von Bytes, ohne irgendwelche (Zeilen-)Umbrüche. Mein Ziel ist es nun, eine solche Datei einzulesen, in zwei Strings/Portionen zu sortieren und dann in zwei verschiedene Dateien zu schreiben. Dabei sollen keine Bytes verändert werden, d.h. wenn ich eine 256Byte große Datei mit dem Inhalt 0x00, 0x01, 0x02 ... 0xFE, 0xFF habe, möchte ich später auch nur diese Zeichen drin haben. Mein bisheriger Code (gekürzt):
Code: |
string daten = null; string abfall= null; long position = 0; byte zeichen;
// ...einen Stream anzulegen... fs_quelldatei = new FileStream (quelldatei.FileName, FileMode.Open, FileAccess.Read, FileShare.Read); // ...und binären Lesezugriff herzustellen br_quelldatei = new BinaryReader (fs_quelldatei);
// ...einen Stream anzulegen sw_zieldatei1= File.CreateText (zieldatei1.FileName); // ...einen Stream anzulegen sw_zieldatei2= File.CreateText (zieldatei2.FileName);
// lese vom Anfang bis zum Ende der Quelldatei while (position < fs_quelldatei.Length) { // ein Zeichen, bzw. nächstes Zeichen, einlesen zeichen = br_exportdatei.ReadByte(); // wähle das Ziel if (zeichen == '41')) // 0x41 = A { // dem Datenstring hinzufügen daten += zeichen; } else { // erst mal verwerfen => dem Abfallstring hinzufügen abfall += zeichen; } } sw_zieldatei1.WriteLine (daten); sw_zieldatei2.WriteLine (abfall);
|
Das Einlesen scheint einwandfrei zu laufen, das Schreiben allerdings nicht! Die Bytes bis 0x7F (also 127 dezimal) funktionieren einwandfrei, alles darüber wird aber falsch zurückgeschrieben (z.B. als 0xC280). Nehme mal stark an, da "läuft" das Byte über, weil noch irgendwo ein Vorzeichen drin ist. Aber wo? Habe jetzt schon zig Versionen druch, aber so geht es nicht :=( Wie liest man eine Datei Byte für Byte ein, um dann einzelne Bytes zu vergleichen und diese dann (in Strings) zu sammeln und sie abschließend am Ende in eine Datei zu schreiben, bzw. wie macht man es richtig, oder wo ist mein Fehler?
Gruß und Danke,
Hans |