none
用StreamReader讀取任何檔案時發生的問題 RRS feed

  • 問題

  • 請問一下:

    平常我們用程式開啟檔案,再用StreamReader的ReadLine()來一行一行讀取文字,假設是常見的正常文字檔(.txt或.xml等等),都不會有問題。

    但是我故意去讀.exe檔,或其他特殊的檔案,就會發生,的確有接到字串回來,但顯示在TextBox或RichTextBox裡的時候,卻只會顯示「MD」,後面的字通通不見的情形,是為什麼呢?

    我在程式裡觀察接回來的字串,發生有大量的脫曳字元(如\0、\f、\t等),是這樣造成的嗎?

    不過我嘗試用記事本開啟.exe檔,記事本又是顯示得出來完整內容的。

    另外請教一下,如果要讀取一個很龐大的檔案,例如幾百MB甚至幾G,例如讀取其中的第1000行到第2000行,要怎麼做會比較有效率跟效能呢?

    2006年11月17日 下午 05:35

解答

  • 就我的觀察,記事本會把\0顯示成一個黑色框框 (char)12。所以你可以讀成byte[]後掃一次把0改成12,再用適當Encoding的GetString方法轉成字串。
    2006年11月20日 下午 06:21

所有回覆

  • null-terminated string遇到null (\0)就表示字串結束,所以你讀進來一行東西放到string裡只會顯示到\0之前
    2006年11月17日 下午 07:14
  • 那再請教一下,

    如何做到像記事本(.txt)一樣,就算把.exe檔拖進去,他一樣能用文字顯示出該檔案的完整內容呢?

    是否不能用string讀,要改用byte讀,再轉為string?或是?

    2006年11月20日 下午 04:20
  • 就我的觀察,記事本會把\0顯示成一個黑色框框 (char)12。所以你可以讀成byte[]後掃一次把0改成12,再用適當Encoding的GetString方法轉成字串。
    2006年11月20日 下午 06:21