![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#11 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Попробовал всё то же самое в C#, при вызове StreamReader.Read (buffer, index, count) идут глюки:
1) требуется как минимум буфер char[count+9] 2) FileStream.Position увеличивается сразу на 1024 3) в буфере почти все символы оказываются нулевые (один-два оказываются случайными) P. S. Код:
Последний раз редактировалось ds.Dante; 24.08.2009 в 17:16. |
![]() |
![]() |
![]() |
#12 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Всё, я разобрался:
Код:
|
![]() |
![]() |
![]() |
#13 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
![]()
Отлично, хоть сам буду знать этот момент. Тебе + в репутацию.
|
![]() |
![]() |
![]() |
#14 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Блин, да там глюков - как маркетологов в MS. :D
1) после StreamReader.Read() величина FileStream.Position увеличивается на 1024 2) после того, как я компенсирую эту величину (FStream.Position += 11-1024), чтение продолжается не совсем оттуда, откуда нужно. Дело может быть во взаимодействии StreamReader и BinaryReader, который тоже используется с тем же файлом. 3) Я выполняю тот код в цикле, и после каждой итерации нужно очищать буфер. Я сделал объявление буфера внутри цикла, но его значение сохраняется. (Это, конечно, вопрос по основам C#). |
![]() |
![]() |
![]() |
#15 | |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
![]()
Я практически уверен, что там нету глюков, просто ты неправильно используешь.
Цитата:
Я помнб как-то читал побайтово файл и делал это через BinaryReader - проблем не было. |
|
![]() |
![]() |
![]() |
#16 | ||
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]() Цитата:
Цитата:
|
||
![]() |
![]() |
![]() |
#17 | ||
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Вот код, наглядно демонстрирующий эту ошибку (Console Application):
Код:
Код:
Цитата:
Цитата:
P. S. если есть какие-то "придирки" по стилю C# - буду рад выслушать. :) Последний раз редактировалось ds.Dante; 27.08.2009 в 15:46. |
||
![]() |
![]() |
![]() |
#18 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Всё, похоже я разобрался.
Во-первых, в StreamReader.Read() аргумент index просто добавляется к count, т. е. из файла читается и записывается в буфер index+count байт. Во-вторых, проблемы с взаимодействием StreamReader и BinaryReader можно обойти, если разными способами устанавливать их позиции чтения. В коде это выглядит так: Код:
Последний раз редактировалось ds.Dante; 27.08.2009 в 18:03. |
![]() |
![]() |
![]() |
#19 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
В продолжение темы: можно ли как-нибудь одной функцией обнулить char[]? Или только присваивать нули в цикле?
|
![]() |
![]() |
![]() |
#20 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
![]()
Не поверите, но у меня опять ошибка. :) После 25-го цикла чтение начинается с начала файла. К сожалению, я не могу показать это в сколько-нибудь удобочитаемом виде, поэтому мне остается только переписать чтение на C++. :)
Даже если я что-то делаю не так - меня удивляет, что нигде нет информации по этой теме (совместное использование StreamReader и BinaryReader). |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
как прочитать из файла имя, фамилию разделенные пробелами и записать их в массив парами | Rom@shka | Общие вопросы C/C++ | 2 | 13.12.2008 16:40 |
Как из юникодного текстового файла прочитать его построчно и неповторяющиеся слова ввести в ListBox? | SkAndrew | Общие вопросы Delphi | 2 | 10.11.2008 22:14 |
Прочитать строку до конца | Иллидан | Общие вопросы C/C++ | 3 | 28.09.2008 02:21 |
Не получается прочитать из файла...( | Regloger | Помощь студентам | 3 | 09.12.2007 14:23 |
Как мне в асме прочитать данные из файла? | lelicman | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 2 | 10.10.2007 09:24 |