Laden/speichern RTF-Inhalte mit anderen Daten, die mithilfe von C#
Ich versuche zurzeit herauszufinden, wie speichern Sie den Inhalt aus einer RichTextbox in eine stream(derzeit mit FileStream -) und tun dies neben ein paar anderen Daten. Dann habe ich natürlich in der Lage sein wollen laden Sie diese Datei.
Ich war gerade dabei, etwas zu verwenden, entlang der folgenden Zeilen.
FileStream stream = new FileStream(); //this is actually correctly defined.
ASCIIEncoding encoding = new ASCIIEncoding();
//write Title
byte[] array = encoding.GetBytes(Title);
stream.WriteByte(Convert.ToByte(array.Length));
stream.Write(array, 0, array.Length);
//save textRange
textRange.Save(stream, System.Windows.DataFormats.Rtf);
//write Subtitle
byte[] array = encoding.GetBytes(Subtitle);
stream.WriteByte(Convert.ToByte(array.Length));
stream.Write(array, 0, array.Length);
//ect...and something very similar for Loading a file.
Dies ist im Grunde, was ich versuche zu tun. Ich bin eigentlich speichern 2 TextRanges und ein paar mehr Eigenschaften. Also mein problem ist, dass TextRange.Load() liest bis das Ende der Datei...macht es mir unmöglich, zu verwenden, dass angesichts ich habe 2 TextRanges ich brauche, um zu speichern/laden.
So hier bin ich versucht zu kommen mit einem anderen Weg, um in der Lage zu speichern/laden der Inhalt einer RichTextBox mit anderen Daten. I dont have to use a Stream. Ich bin so ziemlich offen für mögliche Lösungen. Vielen Dank im Voraus!
~Jasson
- Warum postest du die Hälfte code??
Du musst angemeldet sein, um einen Kommentar abzugeben.
Konnte man laden/speichern in ein MemoryStream um Ihr Problem zu lösen mit dem Lesen am Ende der Datei. Es könnte wie folgt Aussehen:
Sind oder Sie wollen wissen, wie würden Sie erstellen und analysieren eine Datei enthält verschiedene Abschnitte für den Titel und den Inhalt, und alle anderen Felder ?
Ich dachte, ich sollte post meine aktuelle Lösung. Es scheint zu funktionieren perfekt in Ordnung. Danke Chris und Ameisen die Hinweise, wie Sie gehen über das tun dies.
Diese ReadTextRange Methode ist in einem StreamHelper Klasse definierte ich für die Hilfe Lesen aus einem FileStream. Also ist das laden eines TextRange gespeichert ist, um die FileStream-so...
Ich hoffe, dass sich jemand findet das nützlich, wenn/wenn Sie kommen, um ein ähnliches problem! 😀
EDIT:
Habe ich eine profiler und festgestellt, dass dieser code nicht sehr effizient ist, so dass ich mich geändert habe in diesem code viel effizienter in ein paar Möglichkeiten.
Anstatt die TextRange-und verwenden ein byte[] enthält den Inhalt des MemoryStream memStream. Diese schneidet-Bereich.Laden das verbraucht eine Menge CPU.
Nahm ich die Linie stream.Position = startPos + Länge, weil ich erkannte, dass es nutzlos war nach dem ersten Lauf und nahm auch einen angemessenen Betrag von der CPU. Ich platziert stream.Position--; nach der Zeile previousByte = stream.ReadByte();
Auch ich merkte, ich war ein schlechter coder und war nicht folgende MVC, indem er TextRange, UI element, in meinem Daten-Klasse. Jetzt hat es ein byte[], das ist VIEL besser.
BEARBEITEN WIEDER:
Nach ein paar Minuten mit dem byte[] anstelle des TextRange-ich merkte, ich hatte die Größe des byte[] so brauchte ich nicht zu analysieren. So anstelle ich speichern schreiben Sie den byte[] Größe und dann das byte[]. Dies macht es extrem schnell und können Lesen Sie eine sehr große Datei, werden fast augenblicklich.