2012-08-16 67 views
3

我想要做的是讀取文件a.txt並在單行輸出每個字符我有一個​​真正的困難來解決這個問題任何幫助將真的appreciated.if你寫的代碼,請發表評論,所以我可以更清楚地理解,因爲我beginner.thanks使用streamreader讀取並輸出文本文件char by char

namespace ConsoleApplication13 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      using (StreamReader r = new StreamReader("a.txt")) 
      { 

       string @char; 
       while((@char = r.ReadBlock() != null)) 
       foreach(char i in @char) 
       { 
        Console.WriteLine(i); 

       } 

      } 

     } 
    } 
} 
+0

你是目的...是char-by-char?或逐行?要麼...?這是不完全清楚你想要做什麼 – 2012-08-16 10:39:17

+0

這是實際的代碼,我相信我沒有做對:) – Geek 2012-08-16 10:40:06

+0

好的;公平 - 但你能澄清你究竟做了什麼? – 2012-08-16 10:40:42

回答

7

我要閱讀的文件,並輸出所有字符的文件字符,在每個新字符line

OK;有很多方法可以做到這一點;最簡單的將是(對小文件):

string body = File.ReadAllText("a.txt"); 
foreach (char c in body) Console.WriteLine(c); 

要使用ReadBlock來處理數據塊文件(不是行):

using (StreamReader r = new StreamReader("a.txt")) 
{ 
    char[] buffer = new char[1024]; 
    int read; 
    while ((read = r.ReadBlock(buffer, 0, buffer.Length)) > 0) 
    { 
     for (int i = 0; i < read; i++) 
      Console.WriteLine(buffer[i]); 
    } 
} 

這在讀取多達 1024個字符的塊時間,然後寫出我們閱讀的任何內容,每個字符放在一個新行中。變量read告訴我們在該迭代中讀取了多少個字符; read > 0測試(稍微隱藏,但它在那裏)詢問「我們是否已達到文件的結尾?」 - 因爲ReadBlock將在最後返回0。

+0

謝謝,這真的很有幫助。因此,只有在寫入之前讀取塊才能讀取1024個字符,或者它可能需要更多? – Geek 2012-08-16 10:50:14

+0

@Geek你可以製作任意大小的緩衝區;這是一種妥協方式,一次將所有內容加載到內存中(一個過大的緩衝區),並且大量訪問IO棧(具有太小的緩衝區)。典型的IO緩衝區介於512字節至8k(8192字節)之間(作爲非常粗略的指南)。 1024對於大多數情況來說足夠好,分配起來相當便宜。請注意,我們在每次迭代中都使用*** *** ***緩衝區,因此您可以使用1k緩衝區來處理200MB文件。 – 2012-08-16 10:55:57

+0

感謝馬克,這是非常有價值的和有益的,再次感謝:) – Geek 2012-08-16 11:18:47

相關問題