Вот код программы чтения данных из файла. Текстовый файл 1.txt состоит из двух строк abcde и klmno. Кажется все просто, но если замерить размер файла выяснится, то его размер составляет не 10 байт а 12. После первой строки скрыто два технических байта. Это возврат каретки и прогон листа. Если Вы воспользуетись функцией ReadFile вы их не увидите, да и функция у меня возвращает символы, а не их ASCII коды. Для примера простенький код, позаимствоный отчасти у Норсеева. Заранее всем спасибо!
| Код | format PE GUI 4.0 entry start include 'win32a.inc' section '.code' code readable executable start: ;Открываем файл и убеждаемся в том, что мы его открыли invoke CreateFile, _FileName, GENERIC_READ, 0, NULL, \ OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL cmp eax, INVALID_HANDLE_VALUE je FileNotOpen mov [_hFile], eax
; Цикл чтения данных из файла побайтно xor ebx, ebx Lo: cmp ebx,12 je Le ;Перемещаем указатель файла invoke SetFilePointer, eax, ebx, _r, FILE_BEGIN ;Читаем файл invoke ReadFile, [_hFile], _Buffer, 1, _r, NULL ;Выводим прочитанное пользователю invoke MessageBox, HWND_DESKTOP, _Buffer, _Probel, MB_OK add ebx,1 jmp Lo Le:
;Закрываем файл invoke CloseHandle, [_hFile] mov [_hFile], NULL jmp Exit FileNotOpen: invoke MessageBox,HWND_DESKTOP, _FileErrorOpen, NULL, MB_ICONERROR Exit: invoke ExitProcess, 0 section '.data' data readable _FileName du 'C:\1.txt', 0 _FileErrorOpen du 'File opening failt', 0 _Probel du ' ', 0 LL dd 0 section '.rdata' data readable writeable _hFile dd NULL _Buffer rb 22 _r dd 00 section '.idata' data import readable writeable library kernel, 'kernel32.dll',\ user , 'user32.dll' import kernel,\ CreateFile , 'CreateFileW',\ SetFilePointer, 'SetFilePointer',\ ReadFile , 'ReadFile',\ CloseHandle , 'CloseHandle',\ ExitProcess , 'ExitProcess' import user,\ MessageBox, 'MessageBoxA'
|
|