private void button2_Click(object sender, EventArgs e)
{
Graphics g = Graphics.FromHwnd(this.Handle);
FileInfo f = new FileInfo("2srt.dat");
BinaryReader br1 = new BinaryReader(f.OpenRead());
float x = 10, y = 10;
while (br1.PeekChar() != -1)
{
g.DrawString(br1.ReadInt32().ToString(), new Font("Arial", 10), Brushes.Black, new PointF(x, y));
y += 20;
}
}
C# проблема с peekchar()
Код:
При отладке выводится сообщение об ошибке:
System.ArgumentException was unhandled
Message="Буфер выходных символов не достаточен для хранения закодированных символов, кодирование \"Unicode (UTF-8)\" резерв \"System.Text.DecoderReplacementFallback\". Имя параметра: chars"
Не могли бы вы подсказать, как исправить эту ошибку?
этим
или можно по другому попробовать сделать, что-нибудь типа
а хотя
поможет
возможно связано с
или можно по другому попробовать сделать, что-нибудь типа
Код:
while (true)
{
try
{
//... br.ReadInt32(...);
}
catch (EndOfStreamException) { break; }
}
{
try
{
//... br.ReadInt32(...);
}
catch (EndOfStreamException) { break; }
}
а хотя
Цитата:
In general, this arises when the incorrect encoding is set on the BinaryReader (the default one is UTF8 which will be used in your code) from what is encoded in the stream. PeekChar() (and ReadChar()) methods in BinaryReader will attempt to decode the bytes in the stream to fit in with the specified encoding and can fault if they are not compatible. These methods also fail when trying to read a surrogate character.
я думаю
Код:
BinaryReader br1 = new BinaryReader(f.OpenRead(), Encoding.ASCII);
Johnnybg, метод PeekChar проверяет наличие в потоке типа char, а дальше вы считывает тип Int32. В общем случае размер System.Char != размеру System.Int32.
я так понял что размер файла уже выровнен на 4 байта, раз там хранится только массив Int32. хотя это не хорошо, конечно, не обрабатывать экскепшн.