Avatar billede baileys Nybegynder
28. juni 2005 - 11:13 Der er 7 kommentarer og
1 løsning

Problemer med Xml, stream og buffer

Jeg har nedenstående kode - Filename skal tages som en string, indeholdende fuld sti + filnavn til en vilkårlig fil.

---- kode ----

FileStream xmlStream = new FileStream(Filename, FileMode.Create, FileAccess.Write);
MemoryStream saveStream = new MemoryStream();
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
byte[] buffer;

xmlWriterSettings.Indent = true;
xmlWriterSettings.CloseOutput = false;

XmlWriter xmlWriter = XmlWriter.Create(saveStream, xmlWriterSettings);
           
xmlWriter.WriteStartDocument();
// Skriver div. ting
xmlWriter.WriteEndElement();
xmlWriter.Flush();
xmlWriter.Close();

buffer = new byte[saveStream.Length];
saveStream.Read(buffer, 0, buffer.Length);
xmlStream.Read(buffer, 0, buffer.Length);

saveStream.Close();
xmlStream.Close();

--- /kode ---

Min buffer er konstant fyldt med 0-bytes som om der aldrig bliver læst noget ind i den fra saveStream'en.
Giver jeg xmlWriter et filnavn, eller xmlStram som parameter til constructoren, fungerer det fint og uden problemer...

Jeg er lost
Avatar billede baileys Nybegynder
28. juni 2005 - 11:22 #1
Rettelse:

buffer = new byte[saveStream.Length];
saveStream.Read(buffer, 0, buffer.Length);
xmlStream.Write(buffer, 0, buffer.Length);
Avatar billede arne_v Ekspert
28. juni 2005 - 12:19 #2
Hvorfor vil du have din XML:

->MemoryStream->byte[]->FileStream

?
Avatar billede baileys Nybegynder
28. juni 2005 - 12:24 #3
Fordi jeg gerne vil åbne op for muligheden for at manipulere med bytestrømmen, f.eks. til encoding, kryptering, eller hvad der nu ellers vil være passende.

Ellers kunne jeg nok have valgt en lettere løsning :)
Avatar billede arne_v Ekspert
28. juni 2005 - 12:44 #4
hvad med:

        StringWriter sw = new StringWriter();
        XmlTextWriter xtw = new XmlTextWriter(sw);
        xtw.Formatting = Formatting.Indented;
        xtw.WriteStartDocument();
        ...
        xtw.WriteEndDocument();
        xtw.Close();
        sw.Close();
        string s = sw.ToString();
        byte[] b = Encoding.UTF8.GetBytes(s);
Avatar billede baileys Nybegynder
28. juni 2005 - 14:08 #5
Det eneste der lige fanger mig, er at den angiver XML'en som UTF-16, og umiddelbart kan jeg ikke finde en property der lader mig ændre det, hverken på XmlTextWriter eller StringWriter
Avatar billede arne_v Ekspert
28. juni 2005 - 14:10 #6
det er også rigtigt

en String er jo i UTF-16 !

lav en primitiv replace på den ...
Avatar billede baileys Nybegynder
28. juni 2005 - 14:12 #7
Smid et svar, så er det i orden :)
Avatar billede arne_v Ekspert
28. juni 2005 - 14:22 #8
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester