![]() |
#2
东海一鱼2010-07-30 22:42
|

;--------------------------------------------------------------------------------
说明:把uinx文本转换为Windows文本
;--------------------------------------------------------------------------------
changefile proc hfile;传入要转换的文件句柄
LOCAL hnewfile,readnum
LOCAL buff[256]:byte
LOCAL newbuff[256]:byte
;--------------------------------------------------------------------------------
建立新文件
;--------------------------------------------------------------------------------
invoke CreateFile,addr sznewfile,GENERIC_WRITE OR GENERIC_READ,FILE_SHARE_READ,
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
.if eax != INVALID_HANDLE_VALUE
mov hnewfile,eax
.else
invoke CloseHandle,hfile
ret
.endif
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
.while TRUE
invoke RtlZeroMemory,addr newbuff,256
invoke ReadFile,hfile,addr buff,256,addr readnum,0
.break .if !readnum ||!eax;实际读入字节数=0或调用失败,则跳出循环
lea esi,buff
lea edi,newbuff
.while readnum
lodsb
.if al==0ah
mov ax,0a0dh
dec dword ptr readnum
stosw
.else
dec dword ptr readnum
stosb
.endif
.endw
invoke WriteFile,hnewfile,addr newbuff,sizeof newbuff,addr readnum,0
.endw
invoke CloseHandle,hfile
invoke CloseHandle,hnewfile
ret
changefile endp
仿照老罗第十章,第一个小程序写的。说明:把uinx文本转换为Windows文本
;--------------------------------------------------------------------------------
changefile proc hfile;传入要转换的文件句柄
LOCAL hnewfile,readnum
LOCAL buff[256]:byte
LOCAL newbuff[256]:byte
;--------------------------------------------------------------------------------
建立新文件
;--------------------------------------------------------------------------------
invoke CreateFile,addr sznewfile,GENERIC_WRITE OR GENERIC_READ,FILE_SHARE_READ,
0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
.if eax != INVALID_HANDLE_VALUE
mov hnewfile,eax
.else
invoke CloseHandle,hfile
ret
.endif
;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
.while TRUE
invoke RtlZeroMemory,addr newbuff,256
invoke ReadFile,hfile,addr buff,256,addr readnum,0
.break .if !readnum ||!eax;实际读入字节数=0或调用失败,则跳出循环
lea esi,buff
lea edi,newbuff
.while readnum
lodsb
.if al==0ah
mov ax,0a0dh
dec dword ptr readnum
stosw
.else
dec dword ptr readnum
stosb
.endif
.endw
invoke WriteFile,hnewfile,addr newbuff,sizeof newbuff,addr readnum,0
.endw
invoke CloseHandle,hfile
invoke CloseHandle,hnewfile
ret
changefile endp
实际输出结果的字节数,为256的倍数。。。

这片段的步骤是:
1.新建一个文件
2.每次读取源文件256个字节
3.筛选后,写入新文件
4.源文件读取完毕或失败,则关闭文件
[ 本帖最后由 okayyyy 于 2010-7-30 23:27 编辑 ]