Воскресенье
02.02.2025
13:50
Форма входа
Поиск
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Статистика

    OPEN SOURCE PROJECT

    [ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
    • Страница 1 из 1
    • 1
    Работа с ReadFile...
    andXreiДата: Понедельник, 18.05.2009, 13:52 | Сообщение # 1
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: 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
    Репутация: 5
    Статус: 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 НА ХРЕНА??? faint Он вообще не нужен, забудь это слово... Меняй на 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 почетную двойку... happy

     
    andXreiДата: Понедельник, 18.05.2009, 21:16 | Сообщение # 3
    Майор
    Группа: Проверенные
    Сообщений: 95
    Репутация: 2
    Статус: 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
    Репутация: 5
    Статус: 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 проверь текстовый файлик...

     
    • Страница 1 из 1
    • 1
    Поиск: