汇编搜索文件并批量对文件写入

来源:百度知道 编辑:UC知道 时间:2024/06/14 08:25:45
比如在 c:\Text\ 下,有100个.txt文本文件,我想利用汇编文件操作的win api,搜索所有的Text下的.txt,在每个txt开头加入 xyz ,如何实现? 我自己写了代码,但执行没效果,不知道错哪了,帮忙看看,也给出相应正确的代码!
ps: 我个人觉得可能是在 CreateFile 的第一个参数WIN32_FIND_DATA.cFileName 出问题了,估计后面没有0,但我不知道怎么加上去,请指教!! 还有就是句柄,我不知道FindNextFile返回的搜索句柄和打开和关闭的文件句柄是不是一样.也请点拨!
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data
File db 'c:\Text\*.txt',0
szTexT db 'xyz'
_sr WIN32_FIND_DATA <>
NumberWrite dd ?
_handle dd ?
.code
start:
invoke FindFirstFile,addr File,addr _sr
lea eax, _sr.cFileName
invoke CreateFile,eax,GENERIC_WRITE,FILE_SHARE_DELETE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
.while eax!=INVALID_HANDLE_VALUE
mov _handle,eax
invoke WriteFile,_handle,addr szTexT,3,addr NumberWrite

;修改如下:
;=========================
.386
.model flat,stdcall
option casemap:none
include windows.inc
include kernel32.inc
include user32.inc
includelib kernel32.lib
includelib user32.lib
.data
File db 'c:\Text\*.txt',0
szTexT db 'xyz'
_sr WIN32_FIND_DATA <>
NumberWrite dd ?
_handle dd ?
_hFind dd ? ;增加一个搜索句柄
.code
start:
invoke FindFirstFile,addr File,addr _sr
cmp eax,INVALID_HANDLE_VALUE
jz sss_out ;如果没有这类文件则结束
mov _hFind, eax ;保存搜索句柄
sss_lp1:
lea eax, _sr.cFileName
invoke CreateFile,eax,GENERIC_WRITE,FILE_SHARE_DELETE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
mov _handle,eax ;保存文件句柄
invoke WriteFile,_handle,addr szTexT,3,addr NumberWrite,NULL
invoke CloseHandle,_handle ;关闭文件句柄
invoke FindNextFile,_hFind,addr _sr ;用搜索句柄搜索
cmp eax,0
jnz sss_lp1
invoke Fi