tutorials.de Buch-Aktion 02/2012
Like Tree1Danke
  • 1 Beitrag von MCoder
ERLEDIGT
JA
ANTWORTEN
2
ZUGRIFFE
467
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Tim Bureck Tim Bureck ist offline Mitglied Brokat
    Registriert seit
    Apr 2009
    Ort
    Düsseldorf (NRW)
    Beiträge
    498
    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:

    Code csharp:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    
    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:

    Code csharp:
    1
    2
    3
    4
    5
    
    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 :
    1
    
    1A46 5AC7

    bzw.

    Code :
    1
    
    .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 :
    1
    
    359

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

  2. #2
    MCoder MCoder ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jul 2005
    Ort
    München
    Beiträge
    2.425
    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:
    Code csharp:
    1
    2
    3
    
    identifier += (char)reader.ReadByte();
    identifier += (char)reader.ReadByte();
    identifier += (char)reader.ReadByte();
    Gruß
    MCoder
    Tim Bureck bedankt sich. 
    "The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
    --- Larry Wall

  3. #3
    Tim Bureck Tim Bureck ist offline Mitglied Brokat
    Registriert seit
    Apr 2009
    Ort
    Düsseldorf (NRW)
    Beiträge
    498
    Jetzt wo ich es lese, ist alles klar... Byte ist ja 'ne Zahl

    Danke, so funktioniert's korrekt...
     

Ähnliche Themen

  1. Binärdatei einlesen (byteweise)
    Von soeni1987 im Forum Java
    Antworten: 2
    Letzter Beitrag: 14.03.10, 22:13
  2. [C] JPG Bild Byteweise auslesen
    Von Pole17 im Forum C/C++
    Antworten: 7
    Letzter Beitrag: 17.07.09, 17:13
  3. PDF-Datei byteweise einlesen - Fehlerhaft
    Von Saskia21 im Forum Java
    Antworten: 5
    Letzter Beitrag: 25.03.08, 20:37
  4. Antworten: 1
    Letzter Beitrag: 08.03.06, 16:41
  5. CSV-Datei korrekt einlesen
    Von DanielBodensee im Forum Delphi, Kylix, Pascal
    Antworten: 1
    Letzter Beitrag: 24.04.04, 22:46