Foxtable(狐表)用户栏目专家坐堂 → [求助][求助]批量复制文件夹


  共有3516人关注过本帖树形打印复制链接

主题:[求助][求助]批量复制文件夹

美女呀,离线,留言给我吧!
KWK001
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1417 威望:0 精华:0 注册:2016/8/17 12:49:00
[求助][求助]批量复制文件夹  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110816 积分:564024 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1417 威望:0 精华:0 注册:2016/8/17 12:49:00
  发帖心情 Post By:2020/4/20 22:17:00 [只看该作者]

蓝老师,怎么放个进度条或者显示用时,证明没有死机?

 回到顶部
帅哥,在线噢!
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110816 积分:564024 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/20 22:29:00 [只看该作者]


 回到顶部
美女呀,离线,留言给我吧!
KWK001
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1417 威望:0 精华:0 注册:2016/8/17 12:49:00
  发帖心情 Post By: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编辑过]

 回到顶部
帅哥,在线噢!
有点蓝
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110816 积分:564024 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1417 威望:0 精华:0 注册:2016/8/17 12:49:00
  发帖心情 Post By:2020/4/23 11:18:00 [只看该作者]

蓝老师,我用的是内部表,要怎么改,有帮助吗?

 回到顶部
帅哥,在线噢!
有点蓝
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110816 积分:564024 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2020/4/23 11:24:00 [只看该作者]


 回到顶部
美女呀,离线,留言给我吧!
KWK001
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:110 积分:1417 威望:0 精华:0 注册:2016/8/17 12:49:00
  发帖心情 Post By: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


 回到顶部
帅哥,在线噢!
有点蓝
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110816 积分:564024 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By: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

 回到顶部
总数 12 1 2 下一页