Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: программирование на языке Assembler


Информационный Канал Subscribe.Ru

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Assembler

Выпуск № 76
от 05.03.2005, 23:50

Администратор:Калашников О.А.
В номере:Вопросов: 1, Ответов: 5


Вопрос № 17616: Доброе время суток, уважаемые эксперты! Пишу прогу на асме под Винду. Нужно, чтобы она открывала файл и читала из него определёнными порциями содержимое и так, пока не закончится файл (например, invoke ReadFile, hInFile, pMemory, 500, ADDR SizeRe...

Вопрос № 17616
Доброе время суток, уважаемые эксперты!
Пишу прогу на асме под Винду. Нужно, чтобы она открывала файл и читала из него определёнными порциями содержимое и так, пока не закончится файл (например, invoke ReadFile, hInFile, pMemory, 500, ADDR SizeRet, NULL и так по циклу). А как определить, файл закончился? Сравнивать SizeRet с нулем не помогает. Помогите, plz.
Отправлен: 28.02.2005, 18:45
Вопрос задал: Gluck (статус: Посетитель)
Всего ответов отправлено: 5

Отвечает: John Freeman
Здравствуйте, Gluck!
ReadFile между прочим возвращает bytesread...
Ответ отправил: John Freeman (статус: Специалист)
Отправлен: 28.02.2005, 19:29

Отвечает: Bob Johnson
Здравствуйте, Gluck!
Сравнивать лучше то, сколько функция реально прочитала байт с тем, сколько байт ее просили прочитать. Если меньше - значит достигнут конец файла или еще какая-нибудь ошибка. Можно сравнивать и с нулем, но при этом следует иметь ввиду, что вначале функция возвратит число меньше, а уже при следующем вызове - ноль (т.е. надо быть готовым к обработке ситуаций, когда не весь буфер содежить данные).

* EMan2.0: ---===*** Debug mode ***===---

Ответ отправил: Bob Johnson (статус: Академик)
Отправлен: 28.02.2005, 21:46

Отвечает: AxMAD
Здравствуйте, Gluck!
Что определить можно просто сравнить SizeRet и 500, если они не равны то это последний блок...
Ответ отправил: AxMAD (статус: Студент)
Отправлен: 01.03.2005, 09:01

Отвечает: Котиев Зураб
Здравствуйте, Gluck!
Надо сравнивать с 0 еще и возвращаемое ReadFile значение.
При достижении конца файла оно не 0 ,а SizeRet=0;
repeat:
invoke ReadFile, hInFile, pMemory, 500, ADDR SizeRet, NULL
or eax,eax
jne error
cmp dword ptr [SizeRet],0
jne repeat
file_end:
error:
Ответ отправил: Котиев Зураб (статус: 2-ой класс)
Отправлен: 01.03.2005, 11:05

Отвечает: Dark_Lord
Здравствуйте, Gluck!
По идее (см. msdn, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/base/readfile.asp), если при вызова функции чтения из файла параметр асинхронного чтения (последний параметр) не задан, то если указатель достиг конца файла, функция вернёт 0 и GetLastError вернёт ERROR_HANDLE_EOF. То есть, если просто смотреть значение, возвращаемое ReadFile, получаем цикл (см прил.), который читает данные до тех пор, пока не кончится файл.

Приложение:

Ответ отправил: Dark_Lord (статус: Профессионал)
Отправлен: 01.03.2005, 23:57


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2005, RusFAQ.ru, Россия, Москва. Все права защищены.
Идея, дизайн, программирование, авторское право: Калашников О.А.


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: comp.soft.prog.faq
Отписаться

В избранное