2015-04-22 117 views
3

當前嘗試從文本文件創建字符串,但是它們似乎是一個錯誤,阻止流讀取器正確讀取文本文件。試圖從文件創建字符串

private string testString = "Cheese"; 
    private void openToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     if (openFileDialog.ShowDialog() != DialogResult.Cancel) 
     { 
      fileName = openFileDialog.FileName; 
      LoadFile(); 
     } 
    } 

    private void LoadFile() 
    { 
     String lineFromFile = "Chicken"; 
     *StringBuilder RawFileInput = new StringBuilder(); 
     using (StreamReader reader = new StreamReader(fileName)) 
     { 

      while ((lineFromFile = reader.ReadLine()) != null) 
      { 
       RawFileInput.AppendLine(lineFromFile); 
      } 
     }* 
     testString = lineFromFile; 
     testTB.Text = testString; 

    } 

應的代碼執行具有輸出文本框爲空輸出,然而應的星號之間的代碼塊進行註釋,輸出文本框明顯顯示雞的測試短語。因此,我很確定這個特定區域存在問題,但我似乎無法弄清楚。 在此先感謝。

+0

什麼是'RawFileInput.AppendLine('? – Cyral

+2

聽起來你想'File.ReadAllText()'作爲一個相當簡單的方法......但此刻的你正在使用lineFromFile'的'的* *的最終價值,而忽略循環之後的突破傳統命名'RawFileInput'局部變量的值。 .. –

+0

那麼你似乎lineFromFile'追加''到RawFileInput',但你永遠在任何地方使用它,我懷疑你想'的TestString = RawFileInput.ToString();' –

回答

1

如果我對您的代碼瞭解得很清楚,您正在嘗試使用文件中的文本設置testTB.Text。同時,在帳戶,不應該你的最後一行是:

testString = RawFileInput.ToString(); 
    testTB.Text = testString; 

你可以不需要一個StringBuilder的實現同樣的結果,這條線替換你的整個的LoadFile方法:

testTB.Text = File.ReadAllText(fileName); 
0

你應該能夠在整個讀取文檔,如下所示:

var builder = new StringBuilder(); 
using(var reader = new StreamReader(path)) 
    builder.Append(reader.ReadToEnd()); 

這將是理想的,因爲它比ReadAllText更好的性能。

當您需要將當前位置的所有輸入讀取到數據流的末尾時,ReadToEnd效果最佳。如果需要更多控制 從數據流中讀取了多少個字符,請使用 Read(Char [],Int32,Int32)方法過載,這通常會導致 更好的性能。 ReadToEnd假定數據流知道它何時到達末端 。對於交互式協議,其中服務器 發送數據,只有當你問它,並且不關閉連接, ReadToEnd的可能無限期阻塞,因爲它沒有達到結束, ,應該避免。

0

如果你想要一個文件的內容來填充一個文本框,只需設置多行屬性爲true,並使用File.ReadAllLines()

testTb.Lines = File.ReadAllLines(fileName);