これらのコードは以前はうまくいきましたが、バックアップがありませんでした。なぜ本当の理由が分かりません。WPF、C#、 "Textrange.save"メソッドは、4096バイトの ".textファイル"しか保存できません。
目的:私は(重要でない、またはその他の拡張子)の.textファイルに、COMポートから受信したすべてのシリアルポートの内容をログに記録したい、典型的なTextRange.save(ファイルストリーム、DataFormat.Textを使用して) 方法。
ここではサイド・シリアルのコードを示していますが、シリアル・データのコピーをファイルに保存する関数にコピーします。
private void Recieve(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
// Collecting the characters received to our 'buffer' (string).
try
{
data_serial_recieved = serial.ReadExisting();
}
catch
{
//MessageBox.Show("Exception Serial Port : The specified port is not open.");
}
Dispatcher.Invoke(DispatcherPriority.Normal, new Delegate_UpdateUiText(WriteData), data_serial_recieved);
/* log received serial data into file */
Tools.log_serial(data_serial_recieved);
}
それは私が、関数log_serial(文字列)を使用する唯一の場所です。
は、ここで私は、ファイルに文字列を保存するコード来る:私が試したpublic static void log_serial(string input_text)
{
Paragraph parag = new Paragraph();
FlowDocument FlowDoc = new FlowDocument();
string text = input_text;
string filepath = Globals.savePath
+ "\\" + Globals.FileName_Main
+ ".text";
parag.Inlines.Add(text);
FlowDoc.Blocks.Add(parag);
try
{
using (FileStream fs = new FileStream(@filepath, FileMode.OpenOrCreate, FileAccess.Write))
{
TextRange textRange = new TextRange(FlowDoc.ContentStart, FlowDoc.ContentEnd);
textRange.Save(fs, DataFormats.Text);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
を、この部分での例外はありません。
問題:コードを実行するたびに、最後に取得したファイルのサイズは常に4096バイトになります。本当にこのエラーの原因を突き止めることはできません。だれかがアイデアを持っていますか?
特権の問題があるようですが、これらのコードを初めて使用すると、すべてのコンテンツの出力が.textファイルになっていることを覚えています。これは本当に私にとって奇妙です。どんな助け?
感謝:
はここで、出力ファイルを追加する(または作成)あなたのコードの短いバージョンです!私はWPFにはまったく新しいので、何らかの練習をするために書いたことがあります。ちなみに、TextRangeを使用してフロードキュメントを追加することは可能でしょうか?私はそれを行う方法を見つけることができません。 – cmy
最後に私のコードを動作させるために、** FileStream.exist **を使用してファイルが存在するかどうかを確認し、** File.CreateText(filepath)**、** File.AppendText(filepath)**、 **残りを処理するにはStreamWriter.Write(text)**を使用します。 – cmy