none
BinaryReader zu BinaryWriter konvertiert Chars in Bytearrays RRS feed

  • Frage

  • Hallo,

     

    ich habe mir ein Programm geschrieben was eine Binärdatei in mehrere kleine Binärdateien umwandeln soll.

    Ich habe dabei das Problem, dass in den Binärwerten enthaltene WChar Texte (16Byte Character) in Char Texte (8Byte Character) umgewandelt werden.

    Hier ist verkürzt der Code:

    FileStream  srFlashContent  = File.Open(args[0], FileMode.Open, FileAccess.Read);
    BinaryReader binRead        = new BinaryReader(srFlashContent);
    byte[] bybuffer = new byte[iEnd - iStart];
    FileStream srLoader = File.Open(strFilename, FileMode.Create, FileAccess.Write);
    BinaryWriter binFile = new BinaryWriter(srLoader);
    	
    binRead.BaseStream.Seek(iStart, SeekOrigin.Begin);
    
    // binRead.Read(bybuffer, 0, iEnd - iStart);
    bybuffer = binRead.ReadBytes(iEnd - iStart);
    
    // binFile.Write(bybuffer);
    binFile.Write(bybuffer, 0, bybuffer.Length);
    binFile.Close();
    

    Mache ich was falsch?

    Gruß,

    John

     

    Umgebung:

    Visual Studio 2008 SP1

    C# 3.5 SP1

    Win7 64Bit

    Mittwoch, 23. Juli 2014 09:27

Antworten

  • Hallo,

    solange Du nur ein Byte Array verwendest wird nichts konvertiert.

    Verwendest Du jedoch Überladung die Char[] oder String verwenden, so wird beim BinaryReader / -Writer das Encoding verwendet, das man im Konstruktor angeben kann. Und dort ist der Standard UTF-8 und nicht Unicode (UTF-16).

    Oben ist davon allerdings nichts zu sehen.

    Wobei man auf einen BinaryReader / Writer komplett verzichten kann, wenn man eine Datei nur als Binär-Stream verarbeiten will, dann reichen zwei FileStreams.

    Gruß Elmar

    • Als Antwort markiert John Bober Mittwoch, 23. Juli 2014 16:55
    Mittwoch, 23. Juli 2014 10:17
    Beantworter

Alle Antworten

  • Hallo,

    solange Du nur ein Byte Array verwendest wird nichts konvertiert.

    Verwendest Du jedoch Überladung die Char[] oder String verwenden, so wird beim BinaryReader / -Writer das Encoding verwendet, das man im Konstruktor angeben kann. Und dort ist der Standard UTF-8 und nicht Unicode (UTF-16).

    Oben ist davon allerdings nichts zu sehen.

    Wobei man auf einen BinaryReader / Writer komplett verzichten kann, wenn man eine Datei nur als Binär-Stream verarbeiten will, dann reichen zwei FileStreams.

    Gruß Elmar

    • Als Antwort markiert John Bober Mittwoch, 23. Juli 2014 16:55
    Mittwoch, 23. Juli 2014 10:17
    Beantworter
  • Hallo Elmar,

    danke für die Anwort.

    Ich hab das nochmal direkt mit dem Filestreams probiert und genau das gleiche :(
    Dabei ist mir auch aufgefallen, dass er auch die nichtzeichen umwandelt (aus 0xFFFF wird 0xefbf).

    Vielleicht steht auch was im Dateiheader, wo er meint das besonders zu behandeln. Ist mir aber egal, ich mach das jetzt in C.

    Gruß,
    John
    Mittwoch, 23. Juli 2014 16:55
  • Hallo John,

    dann "pfuscht" Dir etwas anderes dazwischen... falls Du nicht wesentliche Teile ausgelassen hast.

    Wenn Du die Datei nur aufteilen willst, schau Dir mal an:
    http://stackoverflow.com/questions/3967541/how-to-split-large-files-efficiently

    Gruß Elmar

    Mittwoch, 23. Juli 2014 18:43
    Beantworter