2016-05-10 5 views
0

これらのコードは以前はうまくいきましたが、バックアップがありませんでした。なぜ本当の理由が分かりません。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ファイルになっていることを覚えています。これは本当に私にとって奇妙です。どんな助け?

答えて

0

あなたは、FlowDocなどを作るために多くの余分な作業をしています。ファイルに渡されたテキストを書き終えることになります。それに加えて、log_serialを呼び出すたびにファイルを上書きしています。

public static void log_serial(string input_text) 
{ 
    string text = input_text; 
    string filepath = Globals.savePath 
        + "\\" + Globals.FileName_Main 
        + ".text"; 
    try 
    { 
     using (var sw = System.IO.File.AppendText(filepath)) 
     { 
      sw.WriteLine(input_text); 
     } 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(ex.ToString()); 
    } 
} 
+0

感謝:

はここで、出力ファイルを追加する(または作成)あなたのコードの短いバージョンです!私はWPFにはまったく新しいので、何らかの練習をするために書いたことがあります。ちなみに、TextRangeを使用してフロードキュメントを追加することは可能でしょうか?私はそれを行う方法を見つけることができません。 – cmy

+0

最後に私のコードを動作させるために、** FileStream.exist **を使用してファイルが存在するかどうかを確認し、** File.CreateText(filepath)**、** File.AppendText(filepath)**、 **残りを処理するにはStreamWriter.Write(text)**を使用します。 – cmy

関連する問題