Hallo zusammen,
ich habe auf der festplatte gespeicherte XML Dokumente die verschlüsselt sind.
diese möchte ich im code laden, entschlüsseln und auslesen. doch das klappt nicht so einfach es sei denn nach dem entschlüsseln, speichere ich das xml dokument auf der festplatte und lese es dann ein. ich möchte natürlich nicht das entschlüsselte dokument auf der festplatte ablegen, sondern in einen stream schreiben und daraus lesen.
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load(filename);
...
LocalLicence.Decrypt(xmlDoc, rsaKey, rsaKeyName);
MemoryStream stream = new MemoryStream();
xmlDoc.Save(stream);
XmlTextReader reader = new XmlTextReader(stream);
while (reader.Read()) { ... }
bei reader.Read() bekomm ich eine XmlException "Das Stammelement ist nicht vorhanden."
wenn ich das Dokument anstatt in einen Stream, in eine Datei speichere mit xmlDoc.Save("test.xml"); dann klappt das einwandfrei.
wie kann ich mein xml-dokument aus einem stream lesen?
danke im voraus
p.s. ich denke hier war das thema schon mal gefragt aber leider ohne lösung:
Eventuell musst du deinen Stream "zurückspulen"
stream.Seek(0, SeekOrigin.Begin);
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
danke! das wars...
aber was mach ich da eigentlich mit dem "zurückspulen"?
Zum Stream gehört eine Position. Das ist ein Zeiger, wo du grade im Stream liest. Wenn du stream.Read ausführst, wird AB dieser Position gelesen.
Mit Seek(0, Begin) kannst du diese Position auf 0 zurücksetzen und somit liest du wieder den ganzen Stream.
Ähnlich wie bei einer Kasette könnte man sagen (nur ohne umdrehen).
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Hallo,
bei vielen Stream, insbesondere beim MemoryStream, kann die Position über die Position-Eigenschaft direkt auf 0 gesetzt werden.
myMemoryStream.Position = 0;
mfG Gü
Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.
"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"