|
OPEN SOURCE PROJECT
Работа с ReadFile...
| |
andXrei | Дата: Понедельник, 18.05.2009, 13:52 | Сообщение # 1 |
Майор
Группа: Проверенные
Сообщений: 95
Статус: Offline
| Что то у меня не получается прочитать данные с файла вот какой я код использую::: Code include 'win32ax.inc' .data File_op db 'D:\MY.txt',0 lpReOpenBuff TCHAR 200 hfile dd ? buff dd ? pass db '334',0 INVAL db 'Невер',0 VALID db 'Верен',0
.code start: invoke OpenFile,File_op,lpReOpenBuff,OF_CANCEL mov [hfile],eax invoke ReadFileEx,[hfile],buff,256
invoke lstrcmp,buff,pass .if eax = 0 invoke MessageBox,0,0,VALID,0 .else invoke MessageBox,0,INVAL,0,0 .endif
invoke ExitProcess,0
.end start Что здесь не так????
|
|
| |
fasm | Дата: Понедельник, 18.05.2009, 20:50 | Сообщение # 2 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| Вопрос, а ты статейки не пишешь? Ну типа, что понял из кода\функций и операторов то и написал в статье... Ну ладно по теме, вопрос обязательно использовать ReadFileEx, почему не взять просто ReadFile?: 1. Где нить сверху вставляй: struct OFSTRUCT cBytes db ? fFixedDisk db ? nErrCode dw ? Reserved1 dw ? Reserved2 dw ? szPathName dd ? ends struct OVERLAPPED Internal dd ? InternalHigh dd ? Offset dd ? OffsetHigh dd ? hEvent dd ? ends 2: Сразу после метки start вставляй код: invoke VirtualAlloc, 0, MAX_PATH, MEM_COMMIT, PAGE_READWRITE mov [buff], eax 3. OF_CANCEL НА ХРЕНА??? Он вообще не нужен, забудь это слово... Меняй на OF_READWRITE 4. Перед директивой .code поставь: lpReOpenBuff OFSTRUCT lpOverlapped OVERLAPPED 5. Теперь надо передать правильные параметры в функцию ReadFileEx invoke GetFileSize, eax, 0 invoke ReadFileEx, [hfile], [buff], eax, lpOverlapped, 0 test eax, eax jz close 6. И в конец добавил строчку close: invoke VirtualFree, [buff], MAX_PATH, MEM_RELEASE invoke ExitProcess,0 .end start Итого 6 исправлений... По школьной системе 2 исправления это кажется минус 1 балл итого 5 - 6/2 = 2... Ставлю вам andXrei почетную двойку...
|
|
| |
andXrei | Дата: Понедельник, 18.05.2009, 21:16 | Сообщение # 3 |
Майор
Группа: Проверенные
Сообщений: 95
Статус: Offline
| Из вышеописанного я понял что это типа должно так выглядеть Code include 'win32ax.inc'
struct OFSTRUCT cBytes db ? fFixedDisk db ? nErrCode dw ? Reserved1 dw ? Reserved2 dw ? szPathName dd ? ends
struct OVERLAPPED Internal dd ? InternalHigh dd ? Offset dd ? OffsetHigh dd ? hEvent dd ? ends
.data File_op db 'D:\MY.txt',0
hfile dd ? buff dd ? pass db '334',0 INVAL db 'Невер',0 VALID db 'Верен',0 lpReOpenBuff OFSTRUCT lpOverlapped OVERLAPPED
.code start: invoke VirtualAlloc, 0, MAX_PATH, MEM_COMMIT, PAGE_READWRITE mov [buff], eax invoke GetFileSize, eax, 0 invoke ReadFileEx, [hfile],[buff],eax,lpOverlapped, OF_READWRITE
invoke lstrcmp,[buff],pass .if eax = 0 invoke MessageBox,0,0,VALID,0 .else invoke MessageBox,0,INVAL,0,0 .endif
close: invoke VirtualFree, [buff], MAX_PATH, MEM_RELEASE invoke ExitProcess,0
.end start принцип работы должен такой считать данные из файла и сравнить его с pass. Но что то он в любом случае выдает то pass и данные из файла что они не совпадают
|
|
| |
fasm | Дата: Вторник, 19.05.2009, 12:51 | Сообщение # 4 |
Admin
Группа: Заблокированные
Сообщений: 122
Статус: Offline
| У меня все ok. Code include '%fasminc%\win32ax.inc'
struct OFSTRUCT cBytes db ? fFixedDisk db ? nErrCode dw ? Reserved1 dw ? Reserved2 dw ? szPathName dd ? ends
struct OVERLAPPED Internal dd ? InternalHigh dd ? Offset dd ? OffsetHigh dd ? hEvent dd ? ends
.data File_op db 'D:\MY.txt',0 pass db '334',0 INVAL db 'Невер',0 VALID db 'Верен',0 hfile dd ? buff dd ?
lpReOpenBuff OFSTRUCT lpOverlapped OVERLAPPED
.code
start: invoke VirtualAlloc, 0, MAX_PATH, MEM_COMMIT, PAGE_READWRITE mov [buff], eax
invoke OpenFile, File_op, lpReOpenBuff, OF_READWRITE mov [hfile], eax
invoke GetFileSize, eax, 0 invoke ReadFileEx, [hfile], [buff], eax, lpOverlapped, 0 test eax, eax jz close
invoke lstrcmp,[buff],pass .if eax = 0 invoke MessageBox,0,VALID,[buff],MB_ICONINFORMATION .else invoke MessageBox,0,INVAL,[buff],MB_ICONERROR .endif
close: invoke VirtualFree, [buff], MAX_PATH, MEM_RELEASE invoke ExitProcess,0
.end start + файл D:\MY.txt должен четко содержать '334', 0 а не всякие там '334',0ah,0dh,0 проверь текстовый файлик...
|
|
| |
|