开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

12
返回列表 发新帖
楼主: qiqixs
打印 上一主题 下一主题
收起左侧

[易语言] 请问目标复制的时候怎么加进度条

[复制链接]
结帖率:55% (17/31)
11
发表于 5 天前 | 只看该作者   河北省邢台市
试试这个API!加上下面这个标志常量可以有进度对话框
https://learn.microsoft.com/zh-c ... pi-shfileoperationa

FOF_SIMPLEPROGRESS
显示进度对话框,但不会在操作时显示单个文件名。


回复

使用道具 举报

结帖率:96% (47/49)

签到天数: 7 天

12
发表于 3 天前 | 只看该作者   河北省秦皇岛市
  
' 声明 CopyFileEx 及回调相关API
DLL命令名返回值类型公开备 注
CopyFileExA逻辑型 
DLL库文件名:
kernel32.dll
在DLL库中对应命令名:
公开
参数名类 型传址数组备 注
lpExistingFileName文本型源文件路径
lpNewFileName文本型目标文件路径
lpProgressRoutine子程序指针进度回调函数
lpData整数型自定义数据(传递总大小和进度条句柄)
pbCancel逻辑型是否取消复制
dwCopyFlags整数型复制标志(0=正常复制)
' 回调函数原型(必须是全局函数)
子程序名返回值类型公开备 注
复制进度回调整数型 
参数名类 型参考可空数组备 注
TotalFileSize整数型文件总大小
TotalBytesTransferred整数型已复制字节数
StreamSize整数型流大小(忽略)
StreamBytesTransferred整数型已复制流字节数(忽略)
dwStreamNumber整数型流编号(忽略)
dwCallbackReason整数型回调原因(忽略)
hSourceFile整数型源文件句柄(忽略)
hDestinationFile整数型目标文件句柄(忽略)
lpData整数型自定义数据(进度条句柄)
.局部变量 进度条句柄, 整数型
.局部变量 进度百分比, 整数型

' 从自定义数据中获取进度条句柄
进度条句柄 = lpData

' 计算进度百分比(避免除零错误)
如果 (TotalFileSize > 0)
进度百分比 = 取整 ( (TotalBytesTransferred / TotalFileSize) × 100)
' 更新进度条(需线程同步,避免UI卡顿)
线程_同步 (进度条句柄, &更新进度条, 进度百分比, )

返回 (0)  ' 0=继续复制,1=取消复制
' 进度条更新函数(线程同步用)
子程序名返回值类型公开备 注
更新进度条  
参数名类 型参考可空数组备 注
进度条句柄整数型
进度值整数型
进度条1.位置 = 进度值  ' 假设进度条控件名为“进度条1”



i支持库列表   支持库注释   
精易, eAPI(未知支持库)

  
子程序名返回值类型公开备 注
计算总大小整数型 返回总字节数
参数名类 型参考可空数组备 注
路径文本型
.局部变量 总大小, 整数型
.局部变量 文件列表, 文本型, , "文件列表"
.局部变量 i, 整数型

如果 (文件_是否存在 (路径))
如果 (文件_是否为目录 (路径))
' 递归计算文件夹大小
文件列表 = 目录_枚举文件 (路径, , , )  ' 枚举所有子文件
计次循环首 (取数组成员数 (文件列表), i)
总大小 = 总大小 + 文件_取大小 (文件列表 [i])
计次循环尾 ()
' 单个文件大小
总大小 = 文件_取大小 (路径)
总大小 = 0

返回 (总大小)



  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
总大小整数型  ' 复制的总字节数  
已复制大小整数型  ' 累计已复制字节数  

子程序名返回值类型公开备 注
_按钮复制_被单击  
变量名类 型静态数组备 注
源路径文本型 
目标路径文本型 
复制成功逻辑型 
' 设置源路径和目标路径(共享文件夹路径如 "\\服务器\共享目录\文件.txt")
源路径 = 编辑框1.内容  ' 例如:"D:\测试文件夹"
目标路径 = 编辑框2.内容  ' 例如:"\\192.168.1.100\共享\测试文件夹"

' 1. 计算总大小(进度条基准)
总大小 = 计算总大小 (源路径)
如果 (总大小 = 0)
信息框 ("源路径不存在或为空!", 0, )
返回 ()
进度条1.位置 = 0
已复制大小 = 0

' 2. 复制文件/文件夹(区分文件和目录)
如果 (文件_是否为目录 (源路径))
' 复制文件夹(递归复制每个文件)
目录_创建 (目标路径)  ' 先创建目标目录
复制文件夹带进度 (源路径, 目标路径)
' 复制单个文件
复制成功 = CopyFileExA (源路径, 目标路径, &复制进度回调, 进度条1.取窗口句柄 (), 假, 0)
如果 (复制成功 = )
信息框 ("文件复制失败!", 0, )
进度条1.位置 = 100
信息框 ("复制完成!", 0, )


子程序名返回值类型公开备 注
复制文件夹带进度逻辑型 
参数名类 型参考可空数组备 注
源目录文本型
目标目录文本型
变量名类 型静态数组备 注
文件列表文本型文件列表
子目录列表文本型子目录列表
i整数型 
源文件文本型 
目标文件文本型 
复制成功逻辑型 
' 获取源目录下的文件和子目录
文件列表 = 目录_枚举文件 (源目录, , , )  ' 非递归枚举文件
子目录列表 = 目录_枚举目录 (源目录, , , )  ' 非递归枚举子目录

' 复制当前目录下的文件
计次循环首 (取数组成员数 (文件列表), i)
源文件 = 文件列表 [i]
目标文件 = 目标目录 + “\”取文本右边 (源文件, 取文本长度 (源文件)取文本长度 (源目录) - 1)

' 调用带进度的文件复制
复制成功 = CopyFileExA (源文件, 目标文件, &复制进度回调, 进度条1.取窗口句柄 (), 假, 0)
如果 (复制成功 = )
返回 ()

计次循环尾 ()

' 递归复制子目录
计次循环首 (取数组成员数 (子目录列表), i)
复制文件夹带进度 (子目录列表 [i], 目标目录 + “\”取文本右边 (子目录列表 [i], 取文本长度 (子目录列表 [i])取文本长度 (源目录) - 1))
计次循环尾 ()

返回 ()


回复

使用道具 举报

结帖率:50% (1/2)

签到天数: 4 天

13
 楼主| 发表于 3 天前 | 只看该作者   江苏省泰州市
2224848 发表于 2025-7-23 03:31
[e=0].版本 2
.支持库 精易, eAPI

抱歉,这个我试过,是无法复制到共享文件的
回复

使用道具 举报

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

本版积分规则 致发广告者

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

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

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