WIN32汇编语言教程:第10章 内存管理和文件操作 · 10.2 文件操作(7)
include kernel32.inc includelib kernel32.lib include ole32.inc includelib ole32.lib include shell32.inc includelib shell32.lib ;#################################################################### ; Equ 等值定义 ;#################################################################### ICO_MAIN equ 1000 DLG_MAIN equ 100 IDC_PATH equ 101 IDC_BROWSE equ 102 IDC_NOWFILE equ 103 ;#################################################################### ; 数据段 ;#################################################################### .data? hInstance dd ? hWinMain dd ? dwFileSizeHigh dd ? dwFileSizeLow dd ? dwFileCount dd ? dwFolderCount dd ? szPath db MAX_PATH dup (?) dwOption db ? F_SEARCHING equ 0001h F_STOP equ 0002h .const szStart db '开始(&S)',0 szStop db '停止(&S)',0 szFilter db '*.*',0 szSearchInfo db '共找到 %d 个文件夹,%d 个文件,共 %luK 字节',0 ;#################################################################### ; 代码段 ;#################################################################### .code include _BrowseFolder.asm ;#################################################################### ; 处理找到的文件 ;#################################################################### _ProcessFile proc _lpszFile local @hFile inc dwFileCount invoke SetDlgItemText,hWinMain,IDC_NOWFILE,_lpszFile invoke CreateFile,_lpszFile,GENERIC_READ,FILE_SHARE_READ,0,\ OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0 .if eax != INVALID_HANDLE_VALUE mov @hFile,eax invoke GetFileSize,eax,NULL add dwFileSizeLow,eax adc dwFileSizeHigh,0 invoke CloseHandle,@hFile .endif ret _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 != '.' inc dwFolderCount invoke _FindFile,addr @szFindFile .endif .else invoke _ProcessFile,addr @szFindFile .endif invoke FindNextFile,@hFindFile,addr @stFindFile .until (eax == FALSE) || (dwOption & F_STOP) invoke FindClose,@hFindFile .endif ;******************************************************************** popad ret _FindFile endp ;#################################################################### _ProcThread proc uses ebx ecx edx esi edi,lParam local @szBuffer[256]:byte ;******************************************************************** ; 设置标志,并灰化“浏览”按钮和路径输入栏 ;******************************************************************** and dwOption,not F_STOP or dwOption,F_SEARCHING invoke GetDlgItem,hWinMain,IDC_PATH invoke EnableWindow,eax,FALSE invoke GetDlgItem,hWinMain,IDC_BROWSE invoke EnableWindow,eax,FALSE invoke SetDlgItemText,hWinMain,IDOK,addr szStop xor eax,eax mov dwFileSizeHigh,eax mov dwFileSizeLow,eax mov dwFileCount,eax mov dwFolderCount,eax invoke _FindFile,addr szPath ;******************************************************************** ; 退出时显示找到文件的总长度
上页:第10章 内存管理和文件操作 · 10.2 文件操作(6) 下页:第10章 内存管理和文件操作 · 10.2 文件操作(8)
第10章 内存管理和文件操作
版权所有 © 云南伯恩科技 证书:粤ICP备09170368号