2017-09-08 80 views
2

試圖運行在while循環價值要麼過大或過小的字符的EOF聲明的FileStream溢出異常

string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt"; 

     FileStream fs = File.Open(filePath, FileMode.Open); 

     char readChar; 
     byte[] b = new byte[1024]; 

     while(fs.Read(b, 0, b.Length) > 0) 
     { 
      readChar = Convert.ToChar(fs.ReadByte()); 
      Console.WriteLine(readChar); 
     } 
+0

https://stackoverflow.com/questions/11985348/read-and-output-a-text-file-using-streamreader-char-by-char –

回答

1

首先你讀文件的1024字節(當獲取溢出異常這可能是你到達文件的末尾),那麼你嘗試讀取下一個字節,在這種情況下,將返回-1,不能轉換爲字符。

你爲什麼要讀第一個1024字節? 嘗試每次讀1個字節:

string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt"; 
FileStream fs = File.Open(filePath, FileMode.Open); 
int val; 
while((val = fs.ReadByte()) > 0) 
{ 
    readChar = Convert.ToChar(val); 
    Console.WriteLine(readChar); 
} 

,你會不會需要byte[] b = new byte[1024];

+0

謝謝我看到我現在犯的錯誤。感謝您清除我的仁慈:)。 – ThatOneCoderDude

+0

非常歡迎 –

0

要調用fs.ReadByte()沒有先檢查fs仍然有留下一個字節。由於您致電while(fs.Read(b, 0, b.Length) > 0),您很可能會將fs清空爲b,然後致電fs.ReadByte()導致您的錯誤。

試着這麼做:

string filePath = @"C:\Users\Klanix\Desktop\NewC#\testfile2.txt"; 

FileStream fs = File.Open(filePath, FileMode.Open); 

for (int i = 0; i < fs.Length; i++) 
{ 
    char readChar = Convert.ToChar(fs.ReadByte()); 
    Console.WriteLine(readChar); 
} 

也嘗試閱讀文檔ReadByte