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

person ThatOneCoderDude    schedule 08.09.2017    source источник
comment
stackoverflow.com/questions/11985348/   -  person Thiago Loureiro    schedule 09.09.2017


Ответы (2)


Сначала вы читаете 1024 байта файла (может быть, вы достигли конца файла), затем вы пытаетесь прочитать следующий байт, который в этом случае вернет -1 и не может быть преобразован в char.

Зачем вообще читать эти первые 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];

person Ashkan Mobayen Khiabani    schedule 08.09.2017
comment
Спасибо, теперь я вижу ошибку, которую я совершил. Спасибо, что очистили мою доброжелательность :). - person ThatOneCoderDude; 09.09.2017

Вы вызываете 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.

person Trisped    schedule 08.09.2017