2017-01-09 42 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

相關問題