精易论坛

标题: 精易模块 建议增加命令 文件_打开文件 文件_打开文件W [打印本页]

作者: RunAway    时间: 2023-2-1 18:38
标题: 精易模块 建议增加命令 文件_打开文件 文件_打开文件W
首先说个bug文件_打开()  在打开大于2G大小的文件的时候 如果文件路径较长 会直接返回-1  (文件大于2G和文件路径较长必须同时满足)以下为测试截图:


经过反复测试 发现是 文件_打开() 命令里面调用 CreateFileA 这个api时 dwShareMode参数填0导致的
因为原本的 文件_打开()  本身就没有什么可以填的参数  所以我就不去动那个代码给他加参数了。
直接新增个 文件_打开文件()  顺便来个W版的 文件_打开文件W()  
参数和核心支持库的 打开文件() 保持一致 同时新增 文件_关闭文件() 与之对应

  
子程序名返回值类型公开备 注
文件_打开文件W整数型 API方式打开文件 调用方式与核心库的"打开文件"命令一致 打开一个普通文件,以对文件进行输入或输出。成功返回被打开文件的文件号,失败返回0。
参数名类 型参考可空数组备 注
欲打开的文件名称字节集
打开方式整数型默认3#读写,1#读入 2#写出 3#读写 4#重写 5#改写 6#改读
共享方式整数型默认1#无限制,1#无限制 2#禁止读 3#禁止写 4#禁止读写
变量名类 型静态数组备 注
局_dwDesiredAccess整数型 
局_dwCreationDisposition整数型 
局_dwShareMode整数型 
局_hFile整数型 
如果真 (是否为空 (打开方式))
打开方式 = #读写
如果真 (是否为空 (共享方式))
共享方式 = #无限制
' CreateFileW 创建或打开文件或I / O设备,返回值句柄
' lpFileName 要创建或打开的文件或设备的名称。
' dwDesiredAccess 打开方式。读:GENERIC_READ,写:GENERIC_WRITE
' dwShareMode 共享方式。禁止读写删除:0,可读:FILE_SHARE_READ,可写:FILE_SHARE_WRITE,可删除:FILE_SHARE_DELETE
' lpSecurityAttributes 0 指向SECURITY_ATTRIBUTES 结构的指针
' dwCreationDisposition 非文件通常设置为OPEN_EXISTING。文件不存在时创建新文件:CREATE_NEW,始终创建新文件:CREATE_ALWAYS,仅打开:OPEN_EXISTING,始终打开:OPEN_ALWAYS,打开并截断(以使其大小为零字节):TRUNCATE_EXISTING)
' dwFlagsAndAttributes 0 文件或设备属性和标志,FILE_ATTRIBUTE_NORMAL是文件的最常见默认值。
' hTemplateFile 0 具有GENERIC_READ访问权限的模板文件的有效句柄。模板文件为正在创建的文件提供文件属性和扩展属性。PS:打开现有文件时,CreateFile会忽略此参数,亦可以设置为0。
' 原核心库 打开方式 参数说明
' 1、#读入:从指定文件读入数据,如果该文件不存在则失败;
' 2、#写出:写出数据到指定文件,如果该文件不存在则失败;
' 3、#读写:从文件中读入数据或者写出数据到文件,如果该文件不存在则失败;
' 4、#重写:写出数据到指定文件。如果该文件不存在则先创建一个新文件,如果已经存在就先清除其中的所有数据;
' 5、#改写:写出数据到指定文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开;
' 6、#改读:从文件中读入数据或者写出数据到文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开。
' 原核心库 共享方式 参数说明
' 1、#无限制:允许其它进程任意读写此文件;
' 2、#禁止读:禁止其它进程读此文件;
' 3、#禁止写:禁止其它进程写此文件;
' 4、#禁止读写:禁止其它进程读写此文件。
判断 (打开方式 = #读入 )  ' #读入:从指定文件读入数据,如果该文件不存在则失败;
局_dwDesiredAccess = #GENERIC_READ
局_dwCreationDisposition = 3  ' #OPEN_EXISTING=3
判断 (打开方式 = #写出 )  ' #写出:写出数据到指定文件,如果该文件不存在则失败;
局_dwDesiredAccess = #GENERIC_WRITE
局_dwCreationDisposition = 3  ' #OPEN_EXISTING=3
判断 (打开方式 = #读写 )  ' 从文件中读入数据或者写出数据到文件,如果该文件不存在则失败;
局_dwDesiredAccess = 位或 ( #GENERIC_READ, #GENERIC_WRITE )
局_dwCreationDisposition = 3  ' #OPEN_EXISTING=3
判断 (打开方式 = #重写 )  ' 写出数据到指定文件。如果该文件不存在则先创建一个新文件,如果已经存在就先清除其中的所有数据;
局_dwDesiredAccess = #GENERIC_WRITE
局_dwCreationDisposition = 2  ' #CREATE_ALWAYS=2
判断 (打开方式 = #改写 )  ' 写出数据到指定文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开;;
局_dwDesiredAccess = #GENERIC_WRITE
局_dwCreationDisposition = 1  ' #CREATE_NEW=1
判断 (打开方式 = #改读 )  ' 从文件中读入数据或者写出数据到文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开。
局_dwDesiredAccess = #GENERIC_READ
局_dwCreationDisposition = 1  ' #CREATE_NEW=1



判断 (共享方式 = #无限制 )
局_dwShareMode = 位或 (1, 2, 4)  ' #FILE_SHARE_READ=1  #FILE_SHARE_WRITE=2 #FILE_SHARE_DELETE=4
判断 (共享方式 = #禁止读 )
局_dwShareMode = 位或 (2, 4)  ' #FILE_SHARE_WRITE=2  #FILE_SHARE_DELETE=4
判断 (共享方式 = #禁止写 )
局_dwShareMode = 1  ' #FILE_SHARE_READ=1
判断 (共享方式 = #禁止读写 )
局_dwShareMode = 0


局_hFile = CreateFileW (欲打开的文件名称, 局_dwDesiredAccess, 局_dwShareMode, 0, 局_dwCreationDisposition, 128, 0)  ' #FILE_ATTRIBUTE_NORMAL=128
如果真 (局_hFile = -1)
局_hFile = 0  ' 核心库打开失败返回的是0 保持一致
返回 (局_hFile)
子程序名返回值类型公开备 注
文件_打开文件整数型 API方式打开文件 调用方式与核心库的"打开文件"命令一致 打开一个普通文件,以对文件进行输入或输出。成功返回被打开文件的文件号,失败返回0。
参数名类 型参考可空数组备 注
欲打开的文件名称文本型
打开方式整数型默认3#读写,1#读入 2#写出 3#读写 4#重写 5#改写 6#改读
共享方式整数型默认1#无限制,1#无限制 2#禁止读 3#禁止写 4#禁止读写
变量名类 型静态数组备 注
局_dwDesiredAccess整数型 
局_dwCreationDisposition整数型 
局_dwShareMode整数型 
局_hFile整数型 
如果真 (是否为空 (打开方式))
打开方式 = #读写
如果真 (是否为空 (共享方式))
共享方式 = #无限制
' CreateFileA 创建或打开文件或I / O设备,返回值句柄
' lpFileName 要创建或打开的文件或设备的名称。
' dwDesiredAccess 打开方式。读:GENERIC_READ,写:GENERIC_WRITE
' dwShareMode 共享方式。禁止读写删除:0,可读:FILE_SHARE_READ,可写:FILE_SHARE_WRITE,可删除:FILE_SHARE_DELETE
' lpSecurityAttributes 0 指向SECURITY_ATTRIBUTES 结构的指针
' dwCreationDisposition 非文件通常设置为OPEN_EXISTING。文件不存在时创建新文件:CREATE_NEW,始终创建新文件:CREATE_ALWAYS,仅打开:OPEN_EXISTING,始终打开:OPEN_ALWAYS,打开并截断(以使其大小为零字节):TRUNCATE_EXISTING)
' dwFlagsAndAttributes 0 文件或设备属性和标志,FILE_ATTRIBUTE_NORMAL是文件的最常见默认值。
' hTemplateFile 0 具有GENERIC_READ访问权限的模板文件的有效句柄。模板文件为正在创建的文件提供文件属性和扩展属性。PS:打开现有文件时,CreateFile会忽略此参数,亦可以设置为0。
' 原核心库 打开方式 参数说明
' 1、#读入:从指定文件读入数据,如果该文件不存在则失败;
' 2、#写出:写出数据到指定文件,如果该文件不存在则失败;
' 3、#读写:从文件中读入数据或者写出数据到文件,如果该文件不存在则失败;
' 4、#重写:写出数据到指定文件。如果该文件不存在则先创建一个新文件,如果已经存在就先清除其中的所有数据;
' 5、#改写:写出数据到指定文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开;
' 6、#改读:从文件中读入数据或者写出数据到文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开。
' 原核心库 共享方式 参数说明
' 1、#无限制:允许其它进程任意读写此文件;
' 2、#禁止读:禁止其它进程读此文件;
' 3、#禁止写:禁止其它进程写此文件;
' 4、#禁止读写:禁止其它进程读写此文件。
判断 (打开方式 = #读入 )  ' #读入:从指定文件读入数据,如果该文件不存在则失败;
局_dwDesiredAccess = #GENERIC_READ
局_dwCreationDisposition = 3  ' #OPEN_EXISTING=3
判断 (打开方式 = #写出 )  ' #写出:写出数据到指定文件,如果该文件不存在则失败;
局_dwDesiredAccess = #GENERIC_WRITE
局_dwCreationDisposition = 3  ' #OPEN_EXISTING=3
判断 (打开方式 = #读写 )  ' 从文件中读入数据或者写出数据到文件,如果该文件不存在则失败;
局_dwDesiredAccess = 位或 ( #GENERIC_READ, #GENERIC_WRITE )
局_dwCreationDisposition = 3  ' #OPEN_EXISTING=3
判断 (打开方式 = #重写 )  ' 写出数据到指定文件。如果该文件不存在则先创建一个新文件,如果已经存在就先清除其中的所有数据;
局_dwDesiredAccess = #GENERIC_WRITE
局_dwCreationDisposition = 2  ' #CREATE_ALWAYS=2
判断 (打开方式 = #改写 )  ' 写出数据到指定文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开;;
局_dwDesiredAccess = #GENERIC_WRITE
局_dwCreationDisposition = 1  ' #CREATE_NEW=1
判断 (打开方式 = #改读 )  ' 从文件中读入数据或者写出数据到文件。如果该文件不存在则创建一个新文件,如果已经存在就直接打开。
局_dwDesiredAccess = #GENERIC_READ
局_dwCreationDisposition = 1  ' #CREATE_NEW=1



判断 (共享方式 = #无限制 )
局_dwShareMode = 位或 (1, 2, 4)  ' #FILE_SHARE_READ=1  #FILE_SHARE_WRITE=2 #FILE_SHARE_DELETE=4
判断 (共享方式 = #禁止读 )
局_dwShareMode = 位或 (2, 4)  ' #FILE_SHARE_WRITE=2  #FILE_SHARE_DELETE=4
判断 (共享方式 = #禁止写 )
局_dwShareMode = 1  ' #FILE_SHARE_READ=1
判断 (共享方式 = #禁止读写 )
局_dwShareMode = 0


局_hFile = CreateFileA (欲打开的文件名称, 局_dwDesiredAccess, 局_dwShareMode, 0, 局_dwCreationDisposition, 128, 0)  ' #FILE_ATTRIBUTE_NORMAL=128
如果真 (局_hFile = -1)
局_hFile = 0  ' 核心库打开失败返回的是0 保持一致
返回 (局_hFile)
子程序名返回值类型公开备 注
文件_关闭文件 API方式关闭文件 调用方式与核心库的"关闭文件"命令一致 关闭被打开的各种类型文件。
参数名类 型参考可空数组备 注
欲关闭的文件号整数型参数值指明欲关闭的文件号,该文件号由“文件_打开文件”命令所返回。
CloseHandle (欲关闭的文件号)






作者: z692435632    时间: 2023-3-18 20:17
有没有寻找字节集W?
作者: 彦晞    时间: 2023-4-25 20:01
感谢。




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4