Исключение переполнения FileStream
Получите исключение переполнения при попытке выполнить оператор eof в цикле while. Значение было слишком большим или слишком маленьким для символа
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);
}
2 ответа
Сначала вы читаете 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];
Ты звонишь 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.