|
|
|
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 198 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Создает файл в несколько строк, и пробует его прочитать, и сразу же напечатать в консоли. Файл создает хорошо. Файл читает. Но в консоли пишет всякую ересь, все невпопад печатает, и кроме того имеются повторы считанного и уже ранее напечатанного в консоли текста. При этом количество считанных байт совпадает с размером файла, и весь текст в общем то в напечатанном имеется, но результат все же неверный. Асинхронность, или жадный поиск, в смысле жадное чтение? или выборочное избирательное перечитывание уже прочтенного файла, не понятно как это вообще такое может быть. Можно ли так подправить код чтобы он сам свои же ошибки и показывал? а то ведь в данном коде чтение завершено типа успешно. И самый вопрос - ReadFile именно так и должен читать файл с диска? |
|||
|
||||
Aa1 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 26.11.2012 Репутация: 1 Всего: 1 |
Перед выводом в консоль добавьте
|
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 198 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Великолепно! Коротко, и лечит капитально, и все работает. Но не понятно!!!
--1- lpBuffer он же Line, так ведь же: vsokovikov.narod.ru/New_MSDN_API/Menage_files/fn_readfile.htm "Доступ к буферу ввода, в то время как операция чтения использует этот буфер, может привести к искажению прочитанных данных в буфер. Приложения не должны читать из, записывать в, перераспределять или освобождать буфер ввода, который использует операция чтения до тех пор, пока она не завершится." ??? --2- BOOL ReadFile( HANDLE hFile, // дескриптор файла LPVOID lpBuffer, // буфер данных DWORD nNumberOfBytesToRead, // число байтов для чтения LPDWORD lpNumberOfBytesRead, // число прочитанных байтов LPOVERLAPPED lpOverlapped // асинхронный буфер ); Так есть же Size, отвечающий за финиш, и он же наверно и должен подсчитывать количество прочитанных символов, и заканчивать свое чтение файла в нужной точке, следовательно проблема по всей видимости в Size, и я подумал что нужно как то экспериментировать с размером Size, добавив DWORD Size0 = GetFileSize(hFile, &Size0); и по мере чтения файла уменьшать его на количество прочитанных символов, с тем чтобы читать только оставшееся количество символов, т.е. пока Size больше 0. Но это как то не сработало. --3- И формула есть, в смысле функция имеется, и что то в ней не ясно, не очевидно, не понятно, значит это магия, и соответственно Line[R]=0; тоже магия --4- Значит надо изучить еще и "Типы данных Windows". Aa1, спасибо! |
|||
|
||||
YahоО |
|
|||
Бывалый Профиль Группа: Участник Сообщений: 198 Регистрация: 11.6.2015 Репутация: нет Всего: 1 |
Line[R]='\0'; // если так, то как бы понятнее )) Но! Почему умный компилятор и умный С++ этого не делают сами? Неужели им самим это невдомек? (ну их же аж двое!)
--- Разве возможны варианты использования функции ReadFile в том виде как она сейчас есть, т.е. без доработок Line[R]=... типа догадайся сам, что после их работы нужно еще какие то коррективы вносить чтобы мусор отделить от плевел, и чтобы все цвело и пахло? ущербная магия требует доработки человеком? Доверяй, но проверяй! ))))) |
|||
|
||||
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |