Korrekt byteweise einlesen

Tim Bureck

Erfahrenes Mitglied
Hallöle zusammen,

ich kämpf mich gerade mit C# durch .NET, um mal was neues kennen zu lernen, und stecke gerade ein bisschen fest. Es geht darum eine Datei byteweise einzulesen. Leider kann ich die gerade nicht anhängen, da ich sie auf diesem PC nicht zur Verfügung habe, ich hoffe das hindert jetzt nicht allzu sehr...

Es geht jedenfalls erstmal um die ersten Zeichen. Folgende Methode habe ich bisher:

C#:
public class NFZImporter {
  public static NFZ Import(FileStream source) {
    BinaryReader reader = new BinaryReader(source);
    NFZ nfz = new NFZ();
    String fileInfo = "";
    byte inByte;

    // Read file information
    while ((inByte = reader.ReadByte()) != '\x1A') { // 1A = Strg + Z, das durchs Dateiformat vorgegebene Terminatorsymbol an dieser Stelle
      fileInfo += inByte;
    }
    
    // Check identifier
    String identifier = "";
    identifier += reader.ReadByte() + reader.ReadByte() + reader.ReadByte();

    if (identifier != NFZ.IDENTIFIER) {
      Console.WriteLine(identifier);
      throw new NFZInvalidException("...");
    }

    return nfz;
  }
}

NFZ.IDENTIFIER ist folgendermaßen deklariert:

C#:
public class NFZ {
  ...
  public static readonly String IDENTIFIER = "FZ\xC7";
  ...
}

So, nun zum Problem: In der Datei steht folgendes (nur der hier relevante Anfang):

Code:
1A46 5AC7

bzw.

Code:
.FZÇ

Also Strg + Z und dem Identifier, wie er auch in der NFZ-Klasse deklariert ist. Der Reader liest nun allerdings an dieser Stelle (gibt beim Console.WriteLine() aus):

Code:
359

und folglich wird auch die Exception geworfen. Wie kann ich nun richtig einlesen, sodass das gewünscht Ergebnis erzielt wird?
 
Hallo,

also am Lesen gibt's nichts auszusetzen, das Problem liegt beim Befüllen des Strings. Da gibt es sicher viele Varianten, z.B. diese hier:
C#:
identifier += (char)reader.ReadByte();
identifier += (char)reader.ReadByte();
identifier += (char)reader.ReadByte();
Gruß
MCoder
 

Neue Beiträge

Zurück