2016-05-10 9 views
0

Этот код, кажется, работал до этого, но у меня не было резервной копии, и теперь возникает такая проблема: я почему бы и нет.WPF, C#, каждый раз, когда метод Textrange.save может сохранять только «.text-файл» из 4096 байтов

Цель: Я хотел бы, чтобы регистрировать все последовательный порт контент, полученный от СОМ-порта, в .text файл (или другое расширение, не важно), используя типичные TextRange.save (FileStream, 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 для добавления flowdocument? Я не могу найти способ сделать это. – cmy

+0

Наконец, чтобы заставить работать мой код, я использовал ** FileStream.exist **, чтобы проверить, существует ли файл, и используйте ** File.CreateText (путь к файлу) **, ** File.AppendText (путь к файлу) ** и ** StreamWriter.Write (текст) **, чтобы сделать все остальное. – cmy