![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Пытаюсь прочитать файл richedit. Иногда всё в норме а иногда в конце
вылезают всякие кракозяблы. Читаю файл следующим образом
Может что неправильно делаю? --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| Гость_Kris |
|
|||
|
Unregistered |
Попробуй вот так
|
|||
|
||||
| Гость_Kris |
|
|||
|
Unregistered |
Точнее вот так
|
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Вы меня, конечно, простите -- я не гуру С++.
Что делает строка
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Тут такая штука. RichEdit ожидает что блок данных заканчивается нулем.
В приведенном примере ReadFile(hFile, cBuff, sizeof(cBuff), &dwBytesRead, NULL); читаются данные в cBuff , но нет гарантии что первый байт после данных будет 0 Строка *(cBuff+dwBytesRead)=0; записывает 0 сразу после блока данных, что исключает появление кракозябр В примере тоже есть очистка ZeroMemory(cBuff, sizeof(cBuff)); но после первого считывания, а часто первое оно же и последнее единственное. В редких случаях когда это не так вызываем SendMessage (hEditWnd, EM_SETSEL, (WPARAM)ndx, (LPARAM)ndx); SendMessage(hEditWnd, EM_REPLACESEL, 0, (LPARAM) (TCHAR*) cBuff); Иначе в RichEdit'e появится только блок данных считанный последним -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Всем спасибо, побежал пробовать
|
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Всё получилось, огромное спасибо, но вылезла другая проблемка.
При открытии файлов более 200к вылетает Buffer overrun ???????? --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
Tror
Как мне кажется sizeof(CBuff) делает не то что вы предполагаете... |
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Я предполагаю, что sizeof(CBuff) возвращает размер буфера, разве нет.
--------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
А откуда он взялся-то, этот cBuff? Его же надо выделить сначала, определиться с размером...
-------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
у меня он определён как
char cBuff[1000] может надо как-то по другому? --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Ну вот, буффер всего 1000 байт, а ты хочешь впихнуть туда 200 000 (!)
Нужно выделять память соответственно размеру файла
Это сообщение отредактировал(а) Aleksandor - 24.11.2005, 15:39 -------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
| Guest |
|
|||
|
Unregistered |
Ну зачем нам тогда нужен
length-=dwBytesRead; если мы выделяем буфер размер которого равен размеру файла |
|||
|
||||
| Tror |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 29.4.2005 Где: Кишинёв Репутация: нет Всего: 4 |
Ну а если предположим памяти не хватит, разве нельзя прочитать файл кусками
тем же cBuff[1000] в цикле? --------------------
Не говори всегда что знаешь, но знай всегда что говоришь. /Клавдий/============================================Кто может -- тот делает. Кто не может... тот получает сертификат MCSE ;) |
|||
|
||||
| Aleksandor |
|
|||
|
Практик ![]() ![]() Профиль Группа: Участник Сообщений: 272 Регистрация: 22.11.2005 Где: россия, зеленогра д Репутация: 10 Всего: 12 |
Надо попробовать
char cBuff[4096+1]; Не забудь еще байтик для нуля-терминатора Тут могут быть нюансы связанные с реализацией файлового менеджера Кстати какая операционка стоит?
-------------------- Call out Gouranga be happy!!! Gouranga Gouranga Gouranga .... That which brings the highest happiness!! |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |