Win32汇编——文件操作

来源:互联网 发布:airdrop 搜不到mac 编辑:程序博客网 时间:2024/06/02 12:30

一、创建和读写文件

打开、创建文件:CreateFile  (文件名需全路径)

关闭: CloseHandle

调整文件指针: SetFilePointer

        无GetFilePointer函数,可通过

invoke  SetFilePointer,hFile,0,NULL,FILE_CURRENT

         获得当前的文件指针。

设置文件结尾:SetEndOfFile

有截断文件和扩充文件的功能。常与SetFilePointer 配合。

读文件: ReadFile

写文件: WriteFile

(读写两函数可以是同步的也可以是异步的,读写的扩展函数EX只能用于异步读写文件)

强制清空数据缓冲区:FlushFileBuffers

加解锁:LockFile  UnlockFile


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; FormatText.asm; 文件读写例子 —— 将 Unix 格式的文本文件(以0ah换行)转换成 PC 格式; 的文本文件(以0dh,0ah换行),读写文件操作使用文件操作函数。;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>;重要部分:;********************************************************************; 循环读出文件并处理每个字节;********************************************************************xoreax,eaxmov@dwBytesRead,eax.whileTRUEinvokeReadFile,@hFile,addr @szReadBuffer,sizeof @szReadBuffer,addr @dwBytesRead,NULL.break.if! @dwBytesReadinvoke_FormatText,addr @szReadBuffer,@dwBytesRead,@hFileNew.endw;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>; 子程序:在缓冲区中找出一行数据,处理换行并保存;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>_FormatTextprocuses esi _lpData,_dwSize,_hFilelocal@szBuffer[128]:byte,@dwBytesWritemovesi,_lpDatamovecx,_dwSizeleaedi,@szBuffer;目的缓冲区,esx+edi xoredx,edxcld_LoopBegin:orecx,ecxjz_WriteLinelodsbdececxcmpal,0dh;遇到0dh则丢弃jz_LoopBegincmpal,0ah;遇到0ah则扩展为0dh,0ahjz_LineEndstosbincedxcmpedx,sizeof @szBuffer-2jae_WriteLine;行缓冲区满则保存jmp_LoopBegin_LineEnd:movax,0a0dhstoswincedxincedx_WriteLine:pushecx  ;WriteFile函数内部使用ecx循环.ifedxinvokeWriteFile,_hFile,addr @szBuffer,edx,addr @dwBytesWrite,NULL.endifleaedi,@szBufferxoredx,edxpopecxorecx,ecxjnz_LoopBeginret_FormatTextendp

二、查找文件

通用结构:

invokeFindFirstFile,lpFindFile,lpFindFileData.ifeax !=INVALID_HANDLE_VALUEmovhFindFile,eax.repeat;处理文件invokeFindNextFile,hFindFile,lpFindFileData.untileax ==FALSEinvokeFindClose,hFindFile.endif

lpFindFileData 指向WIN32_FIND_DATA,该结构中cFileName字段只返回文件名,不包含路径信息。


三、一些文件操作函数

获取文件类型:GetFileType

获取文件长度:GetFileSize

获取文件时间:GetFileTime (存于FILETIME结构)

修改文件时间:SetFileTime

文件时间格式转为系统时间格式:FIleTimeToSystemTime

系统时间格式转为文件时间格式:SystemTimeToFileTime

修改文件属性:SetFileAttributes (不需要打开文件,只需指定全路径的文件名即可)

获取文件属性:GetFileAttributes

拷贝文件:CopyFileCopyFileEx (CopyFileEx可指定回调函数对数据进行处理,如显示进度等,适合大型文件的拷贝

移动文件:MoveFileMoveFileEx MoveFileEx可以实现让系统在下次启动时删除指定文件)

删除文件:DeleteFile (关闭的文件才能删除)


四、驱动器和目录

创建、修改、删除卷标:SetVolumeLabel

逻辑驱动器检测:GetLogicalDrives:无输入参数,返回值0~25位分别代表A~Z盘符

                GetLogicaDriveStrings:返回所有盘符组成的字符串,以0间隔

检测驱动器类型:GetDriveType

获取逻辑驱动器更多属性:GetVolumeInformation

检测逻辑驱动器剩余空间:GetDiskFreeSpace

创建和删除目录:CreateDirectory、RemoveDirectory (诸多注意 P371)

获取和修改当前目录:GetCurrentDirectory、SetCurrentDirectory

获取临时目录:GetTempPath

获取Windows目录:GetWindowsDirectory

获取系统目录:GetSystemDirectory


原创粉丝点击