开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 3415|回复: 2
收起左侧

[已回应] 精易模块 建议增加命令 文件_打开文件 文件_打开文件W

[复制链接]
发表于 2023-2-1 18:38:19 | 显示全部楼层 |阅读模式   湖北省武汉市
首先说个bug文件_打开()  在打开大于2G大小的文件的时候 如果文件路径较长 会直接返回-1  (文件大于2G和文件路径较长必须同时满足)以下为测试截图:
QQ截图20230201181759.jpg

经过反复测试 发现是 文件_打开() 命令里面调用 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 (欲关闭的文件号)





评分

参与人数 1好评 +1 精币 +5 收起 理由
项目部004 + 1 + 5 此处应该有鼓励~

查看全部评分

结帖率:100% (7/7)
发表于 2023-4-25 20:01:38 | 显示全部楼层   广东省广州市
感谢。
回复 支持 反对

使用道具 举报

结帖率:94% (243/259)
发表于 2023-3-18 20:17:09 | 显示全部楼层   江西省萍乡市
有没有寻找字节集W?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表