Исключение переполнения 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.

Другие вопросы по тегам