以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助][求助]批量复制文件夹 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=148991) |
-- 作者:KWK001 -- 发布时间:2020/4/20 21:56:00 -- [求助][求助]批量复制文件夹 批量复制文件夹,大文件复制时,在任务管理器,Foxtable 显示程序无响应,各位看看可不可以优化一下呢? CellButtonClick If e.Col.Name = "状态" Then e.Cancel=True Dim dlg As New FolderBrowserDialog Dim Folder1, Folder2 As String dlg.Description = "选择本地文件夹" If dlg.ShowDialog = DialogResult.Ok Then MessageBox.Show("你选择的本地文件夹是:" & dlg.SelectedPath,"提示") Folder1 = dlg.SelectedPath dlg.Description = "选择服务器文件夹" If dlg.ShowDialog = DialogResult.Ok Then MessageBox.Show("你选择的备份文件夹是:" & dlg.SelectedPath,"提示") Folder2 = dlg.SelectedPath e.Row("文件位置")=Folder1 e.Row("服务器备份路径")=Folder2 e.Row("状态")="已设置路径" Tables("表b").AutoSizeCols() End If End If End If For Each r As Row In Tables("表b") Dim Multi As String = r("文件位置") Dim Multi2 As String = r("服务器备份路径") try FileSys.CopyDirectory (multi,Multi2,False) catch End try Dim d As Date=today() r("备份日期") = d Next [此贴子已经被作者于2020/4/20 21:56:50编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/4/20 22:05:00 -- 就算直接在资源管理器复制大文件,整个电脑都卡的蜗牛样,没有办法的 最多试试这样 For Each r As Row In Tables("表b") Dim Multi As String = r("文件位置") Dim Multi2 As String = r("服务器备份路径") try FileSys.CopyDirectory (multi,Multi2,False) application.doevents catch End try Dim d As Date=today() r("备份日期") = d Next |
-- 作者:KWK001 -- 发布时间:2020/4/20 22:17:00 -- 蓝老师,怎么放个进度条或者显示用时,证明没有死机? |
-- 作者:有点蓝 -- 发布时间:2020/4/20 22:29:00 -- 试试使用异步函数:http://www.foxtable.com/mobilehelp/topics/3269.htm |
-- 作者:KWK001 -- 发布时间:2020/4/22 19:30:00 -- 蓝老师,我仿照做了一个,出现以下问题,再给我看看哪里可以优化。 好像Table、Datatable,窗口及窗口控件,菜单及菜单组件,都不应该在异步函数中调用
1、.NET Framework 版本:4.0.30319.42000 Foxtable 版本:2020.1.19.19 错误所在事件:自定义函数copy 详细错误信息: 调用的目标发生了异常。 BindingSource 不能是自己的数据源。请不要将 DataSource 和 DataMember 属性设置为循环引用 BindingSource 的值。 2、执行主窗口_Button6_Click后,很快就显示 MessageBox.SHOW(" 更新 已完成 ! "),但是目标盘的文件实际还没有copy万了,这个怎么破解。 3、关闭窗口或退出程序后还会自动执行么?copy完了后怎么提示呢? 我的代码: 主窗口_Button6_Click
DataTables("表b").deleteFor("文件位置 is null")
If Tables("表b").Rows.Count =
0 Then \'这是空表
MessageBox.SHOW(" 这是一个空白表,请设置后再执行! ","提示") Else
e.Form.Controls("Label1").Text = "正在执行,不要关闭窗口,请稍后... ..."
Application.DoEvents() \'即刻暂停代码的执行,重新绘制控件后,继续执行代码. For i As Integer = 1 To 100
Functions.AsyncExecute("copy") Next Sleep (2000) \'等待2秒,待所有子线程线程执行完毕
Tables("表b").AutoSizeCols()
e.Form.Controls("Label1").Text = " "
MessageBox.SHOW(" 更新 已完成 ! ")
DataTables.save End If
自定义函数
Copy
For Each r As Row In Tables("表b")
Dim Multi As String = r("文件位置") Dim Multi2 As String = r("服务器备份路径") try FileSys.CopyDirectory
(multi,Multi2,False) catch End try Dim d As Date=today()
r("备份日期") =
d Next
全局代码
COPY
Public Copy As Integer [此贴子已经被作者于2020/4/22 20:01:50编辑过]
|
-- 作者:有点蓝 -- 发布时间:2020/4/23 9:06:00 -- 先看懂代码,在用,不要只会照抄。 1、去掉循环 For i As Integer = 1 To 100 Functions.AsyncExecute("copy") Next Sleep (2000) \'等待2秒,待所有子线程线程执行完毕 改为 Functions.AsyncExecute("copy") 2、copy函数里不能使用table,改为使用SQLcommand从数据库里取数据
|
-- 作者:KWK001 -- 发布时间:2020/4/23 11:18:00 -- 蓝老师,我用的是内部表,要怎么改,有帮助吗? |
-- 作者:有点蓝 -- 发布时间:2020/4/23 11:24:00 -- 参考:http://www.foxtable.com/webhelp/topics/0696.htm |
-- 作者:KWK001 -- 发布时间:2020/4/23 15:32:00 -- 我还是不行啊,请蓝老师指教一下呢? .NET Framework 版本:4.0.30319.42000 Foxtable 版本:2020.4.19.8 错误所在事件:自定义函数,copy 详细错误信息: 调用的目标发生了异常。 Dim cmd As New SQLCommand Dim dt As DataTable = cmd.ExecuteReader cmd.CommandText = "select * Fro m {表b}" For Each dr As DataRow In dt.DataRows Dim Multi As String = dr("文件位置") Dim Multi2 As String = dr("服务器备份路径") try FileSys.CopyDirectory (multi,Multi2,False) catch End try Dim d As Date=today() dr("备份日期") = d Next |
-- 作者:有点蓝 -- 发布时间:2020/4/23 15:40:00 -- Dim cmd As New SQLCommand cmd.CommandText = "select * Fro m {表b}" Dim dt As DataTable = cmd.ExecuteReader For Each dr As DataRow In dt.DataRows Dim Multi As String = dr("文件位置") Dim Multi2 As String = dr("服务器备份路径") try FileSys.CopyDirectory (multi,Multi2,False) catch End try Dim d As Date=today() dr("备份日期") = d Next dt.save |