|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
24.08.2009, 15:24 | #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. |
24.08.2009, 18:12 | #12 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Всё, я разобрался:
Код:
|
25.08.2009, 14:50 | #13 |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
Отлично, хоть сам буду знать этот момент. Тебе + в репутацию.
|
25.08.2009, 17:58 | #14 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Блин, да там глюков - как маркетологов в MS. :D
1) после StreamReader.Read() величина FileStream.Position увеличивается на 1024 2) после того, как я компенсирую эту величину (FStream.Position += 11-1024), чтение продолжается не совсем оттуда, откуда нужно. Дело может быть во взаимодействии StreamReader и BinaryReader, который тоже используется с тем же файлом. 3) Я выполняю тот код в цикле, и после каждой итерации нужно очищать буфер. Я сделал объявление буфера внутри цикла, но его значение сохраняется. (Это, конечно, вопрос по основам C#). |
26.08.2009, 17:49 | #15 | |
Участник клуба
Регистрация: 03.05.2007
Сообщений: 1,189
|
Я практически уверен, что там нету глюков, просто ты неправильно используешь.
Цитата:
Я помнб как-то читал побайтово файл и делал это через BinaryReader - проблем не было. |
|
27.08.2009, 14:59 | #16 | ||
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Цитата:
Цитата:
|
||
27.08.2009, 15:43 | #17 | ||
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Вот код, наглядно демонстрирующий эту ошибку (Console Application):
Код:
Код:
Цитата:
Цитата:
P. S. если есть какие-то "придирки" по стилю C# - буду рад выслушать. :) Последний раз редактировалось ds.Dante; 27.08.2009 в 15:46. |
||
27.08.2009, 18:00 | #18 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
Всё, похоже я разобрался.
Во-первых, в StreamReader.Read() аргумент index просто добавляется к count, т. е. из файла читается и записывается в буфер index+count байт. Во-вторых, проблемы с взаимодействием StreamReader и BinaryReader можно обойти, если разными способами устанавливать их позиции чтения. В коде это выглядит так: Код:
Последний раз редактировалось ds.Dante; 27.08.2009 в 18:03. |
28.08.2009, 11:51 | #19 |
Старожил
Регистрация: 06.08.2009
Сообщений: 2,992
|
В продолжение темы: можно ли как-нибудь одной функцией обнулить char[]? Или только присваивать нули в цикле?
|
31.08.2009, 17:26 | #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 |