Entwickler-Ecke

IO, XML und Registry - byte Array in Xml speichern


danielf - Mi 16.12.09 16:18
Titel: byte Array in Xml speichern
Hallo,

ich versuche gerade Metadaten mit Binärdaten (image) in ein Xml (Unicode) zu bekommen. Leider funktioniert es nicht wirklich.

Ich kann die Daten mit einem XmlWriter abspeichern. Aus Bequemlichkeit verwende ich zum Einlesen einen XmlDocument - soweit so gut. Problem nun, wenn ich die Binärdaten einzulesen und anschließend sie zu verarbeiten gibt es Probleme. Ich vermute beim de/encoden geht irgendwo was falsch. Hab keine Idee mehr :(

Hier ein paar Codenippels zum

Speichern)

C#-Quelltext
1:
2:
3:
4:
5:
         XmlWriterSettings settings = new XmlWriterSettings();
            settings.Encoding = Encoding.Unicode;
            XmlWriter writer = XmlWriter.Create(stream, settings);

writer.WriteBase64(this.ImageRawData.GetBuffer(), 0, (intthis.ImageRawData.Length);


Laden)

C#-Quelltext
1:
2:
3:
4:
5:
            XmlNode imageNode = (XmlNode) doc.SelectSingleNode(@"/jigsaw/image");

            this.ImageRawData = new MemoryStream();
            byte[] imageRawData = Encoding.Unicode.GetBytes(imageNode.OuterXml);
            this.ImageRawData.Write(imageRawData, 0, imageRawData.Length);


Wüßte nicht was schief geht :/ Aber bin vor lauter Varianten auch schon ganz verwirrt, wäre schön, wnen mir einer das Licht zeigt ;)

Gruß Daniel


Christian S. - Mi 16.12.09 16:23

Du verschweigst leider, was das denn für Probleme sind, die da entstehen, aber spontan würde ich sagen: Wenn Du dann als Base64 kodiert speicherst, musst sie danach erst einmal wieder dekodieren, oder? :gruebel:


danielf - Mi 16.12.09 16:30

Ja, das klingt logisch. Leider verwende ich beim Laden eben das XmlDocument und ich habe keinen passenden Stream/Position von der aus ich dem Pendant zum XmlWriter, dem XmlReader sagen könnte los ReadBase64 ... :/

Bei den Binärdaten handelt es sich um den Inhalt eines Bildes (byte[] imageBuffer = File.ReadAllBytes(file.FullName);). Der Fehler tritt dann ein, wenn ich versuche aus den gespeicherten und den geladen Daten versuche ein Bitmap zu laden.


danielf - Mi 16.12.09 16:36

Jippi, hab was gefunden :D

Von http://dotnet-snippets.de/dns/c-image-zu-base64-konvertieren-und-zurueck-SID958.aspx:

C#-Quelltext
1:
byte[] buffer = Convert.FromBase64String(base64String);                    


bzw.

C#-Quelltext
1:
string output = Convert.ToBase64String(buffer, Base64FormattingOptions.InsertLineBreaks);