ReadFileEx是kernel32.dll里的一个api,与ReadFile相似,只是它只能用于异步读取文件操作,异步操作完成后会调用指定的回调函数。我们先调用OpenFile打开文件。
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-readfileex
打开文件OpenFile
.版本 2 .DLL命令 打开文件_, 整数型, "kernel32.dll", "OpenFile", , $(b) .参数 文件名, 文本型, , lpFileName,欲打开文件的名字 .参数 文件操作结果, 文件结构信息_, 传址, lpReOpenBuff,文件操作结果 .参数 操作方式, 整数型, , wStyle,操作方式
读入文件数据ReadFileEx
.版本 2 .DLL命令 读入文件数据_, 整数型, "kernel32", "ReadFileEx" .参数 文件句柄, 整数型, , hfile,文件的句柄 .参数 数据缓冲区, 字节型, 数组, lpbuffer,指定容纳读入数据的一个缓冲区。除非读操作执行完毕,否则不要访问这个缓冲区 .参数 读入长度, 整数型, , nnumberofbytestoread,要读入的字节数 .参数 异步操作结构, 重叠操作_, , lpoverlapped,定义了一个异步操作的结构。使用这个函数时,结构中的hEvent字段会被忽略 .参数 回调函数返回值, 整数型, , lpcompletionroutine,回调函数的返回值
文件结构信息OFSTRUCT
.版本 2 .数据类型 文件结构信息, ,OFSTRUCT .成员 结构长度, 字节型, , , cBytes,设置成结构的长度(目前是136) .成员 文件盘符, 字节型, , , fFixedDisk,参见相关帮助 .成员 错误代码, 整数型, , , nErrCode,参见相关帮助 .成员 保留1, 整数型, , , Reserved1,保留不用 .成员 保留2, 整数型, , , Reserved2,保留不用 .成员 文件路径, 文本型, , "128", szPathName,文件的完整路径名
重叠操作OVERLAPPED
.版本 2 .数据类型 重叠操作_, , OVERLAPPED .成员 内部保留参数, 整数型, , , Internal .成员 内部高位保留参数, 整数型, , , InternalHigh .成员 低32位, 整数型, , , offset .成员 高32位, 整数型, , , offsethigh .成员 事件句柄, 整数型, , , hevent
易语言调用
.版本 2 .程序集 窗口程序集_启动窗口 .子程序 _按钮_读入内容_被单击 .局部变量 局部_文件句柄, 整数型 .局部变量 局部_文件信息, 文件结构信息 .局部变量 局部_文件内容, 字节型, , "500" .局部变量 局部_异步操作的结构, 重叠操作_ .局部变量 局部_计次, 整数型 .局部变量 局部_内容, 文本型 .如果真 (通用对话框1.打开 () = 真) 局部_文件句柄 = 打开文件_ (通用对话框1.文件名, 局部_文件信息, 32) 读入文件数据_ (局部_文件句柄, 局部_文件内容, 50, 局部_异步操作的结构, 0) .计次循环首 (50, 局部_计次) 局部_内容 = 局部_内容 + 字符 (局部_文件内容 [局部_计次]) .计次循环尾 () 编辑框_运行结果.内容 = 局部_内容 .如果真结束