首页
社区
课程
招聘
[求助]findfile总是出错
发表于: 2008-9-4 04:47 3230

[求助]findfile总是出错

2008-9-4 04:47
3230
代码是拷贝自罗云彬的教程,在找到两个文件后就会提示错误,请大家帮忙看看代码有什么问题。

    .386
    .model flat, stdcall
    option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include    windows.inc
include    user32.inc
includelib  user32.lib
include    kernel32.inc
includelib  kernel32.lib
include    ole32.inc
includelib  ole32.lib
include    shell32.inc
includelib  shell32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .data?
    
hInstance  dd  ?
szPath    db  MAX_PATH dup (?)

    .const
    
szStart    db  'title',0
szFilter  db  '*.*',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    .code

include    .\_BrowseFolder.asm

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 处理找到的文件
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcessFile  proc  _lpszFile
    
    pushad
    invoke  MessageBox,NULL,_lpszFile,offset szStart,MB_OK
        popad  
                
_ProcessFile  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_FindFile  proc  _lpszPath
    local  @stFindFile:WIN32_FIND_DATA
    local  @hFindFile
    local  @szPath[MAX_PATH]:byte    ;用来存放“路径\”
    local  @szSearch[MAX_PATH]:byte  ;用来存放“路径\*.*”
    local  @szFindFile[MAX_PATH]:byte  ;用来存放“路径\找到的文件”

    pushad
    invoke  lstrcpy,addr @szPath,_lpszPath
;********************************************************************
; 在路径后面加上\*.*
;********************************************************************
    @@:
    invoke  lstrlen,addr @szPath
    lea  esi,@szPath
    add  esi,eax
    xor  eax,eax
    mov  al,'\'
    .if  byte ptr [esi-1] != al
      mov  word ptr [esi],ax
    .endif
    invoke  lstrcpy,addr @szSearch,addr @szPath
    invoke  lstrcat,addr @szSearch,addr szFilter
;********************************************************************
; 寻找文件
;********************************************************************
    invoke  FindFirstFile,addr @szSearch,addr @stFindFile
    .if  eax !=  INVALID_HANDLE_VALUE
      mov  @hFindFile,eax
      .repeat
        invoke  lstrcpy,addr @szFindFile,addr @szPath
        invoke  lstrcat,addr @szFindFile,addr @stFindFile.cFileName
        .if  @stFindFile.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
          .if  @stFindFile.cFileName != '.'
              invoke  _FindFile,addr @szFindFile
          .endif
        .else
          invoke  _ProcessFile,addr @szFindFile
        .endif
        invoke  FindNextFile,@hFindFile,addr @stFindFile
      .until  eax ==  FALSE
      invoke  FindClose,@hFindFile
    .endif
    popad
    ret

_FindFile  endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
    invoke  _BrowseFolder,NULL,addr szPath
    invoke  _FindFile,addr szPath
    invoke  ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    end  start

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回