2017-01-09 83 views
0

我正在尝试创建一个Windows应用程序,该应用程序将加载大约30MB的大型日志文件。如何在C#Windows应用程序中加载大文件

这里最好的办法是什么,因为我曾尝试使用RichTextBox控件加载它,但会在显示文件之前阻塞客户端很长一段时间。

我曾尝试使用此代码

textBox1.Text = File.ReadAllText(Path + "\\Data.log"); 

我一直在使用一个TextBoxRichTextBox控制

+0

线程将帮助,也考虑文件流,但我在一个线程加载,这样的UI响应停留。 – Trey

+0

我建议加载异步,这样你的用户界面不会得到阻止 – taquion

+0

为什么你会选择一个庞大的控件,而不是使用正确的名称? RichTextBox VTC – Paparazzi

回答

2
StringBuilder sb = new StringBuilder(); 
      using (var sr = new StreamReader("path")) 
      { 
       do 
       { 
        var line = sr.ReadLine(); 
        sb.Append(line); 
       } while (!sr.EndOfStream); 
      } 
      textBox1.Text = sb.ToString(); 
1

我认为你可以将文件虚拟分割成块,然后加载此块由试图加载日志文件目的。例如,当你打开你的编辑器时,你只加载文件的一部分(一个或几个块),然后当用户向下滚动时 - 加载更多等等。块的大小取决于用户打开编辑器时显示的信息量。

作为RichTextBox的示例,您可以试试answer,但您仍然需要确定哪些大小的块最适合您。

1

我个人推荐System.IO +线程。

例子:

string[] files = ["file1.txt", "file2.txt"]; 
void Main() { 
    var th = new Thread(readFiles); 
    th.Start(); 
} 

void readFiles() { 
    foreach (string file in files) { 
     var fileContents = ""; 
     fileContents = System.IO.File.ReadAllText(file); 
     // do something 
    } 
} 
+0

这并没有解决他如何使UI保持响应的主要问题... – Trey

+0

我已经试过 textBox2.Text = File.ReadAllText(Path +“\\ data.log”); 但阻止应用程序 –

+0

@FredrikNorling使用线程处理不应该这样做。检查最新的编辑。 – skiilaa

相关问题