WPF,C#,每次" Textrange.save"方法只能保存" .text文件" 4096字节

时间:2016-05-10 14:37:20

标签: c# wpf richtextbox filesize textrange

这些代码之前似乎有用,但我没有备份,现在它出现了这个问题,我真的无法弄清楚原因。

目的:我想使用典型的TextRange.save(文件流)将从COM端口接收的所有串口内容记录到.text文件(或其他扩展名,不重要)中,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(string)的唯一地方。

这是我将字符串保存到文件中的代码:

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文件中。这对我来说真的很奇怪。有什么帮助吗?

1 个答案:

答案 0 :(得分: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());
    }
}