Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

C# проблема с peekchar()

45K
12 апреля 2010 года
Johnnybg
9 / / 02.03.2009
Добрый вечер. Возникла проблема с функцией PeekChar(), возвращающей следующий элемент в файле, если он есть, и -1, если файл пуст. Вот код:
Код:
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;
            }
        }

При отладке выводится сообщение об ошибке:
System.ArgumentException was unhandled
Message="Буфер выходных символов не достаточен для хранения закодированных символов, кодирование \"Unicode (UTF-8)\" резерв \"System.Text.DecoderReplacementFallback\". Имя параметра: chars"
Не могли бы вы подсказать, как исправить эту ошибку?
8.2K
13 апреля 2010 года
bagie2
299 / / 26.10.2008
возможно связано с этим
или можно по другому попробовать сделать, что-нибудь типа

 
Код:
while (true)
            {
                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);
поможет
297
16 апреля 2010 года
koodeer
1.2K / / 02.05.2009
Johnnybg, метод PeekChar проверяет наличие в потоке типа char, а дальше вы считывает тип Int32. В общем случае размер System.Char != размеру System.Int32.
8.2K
16 апреля 2010 года
bagie2
299 / / 26.10.2008
я так понял что размер файла уже выровнен на 4 байта, раз там хранится только массив Int32. хотя это не хорошо, конечно, не обрабатывать экскепшн.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог