Foxtable(狐表)用户栏目专家坐堂 → 如何代码可以实现上传所选的目录及目录下的文件


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

主题:如何代码可以实现上传所选的目录及目录下的文件

帅哥哟,离线,有人找我吗?
fvcfox
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:571 积分:5432 威望:0 精华:0 注册:2020/5/7 13:05:00
如何代码可以实现上传所选的目录及目录下的文件  发帖心情 Post By:2022/8/5 10:21:00 [只看该作者]

请教怎样使用 do while 实现可以上传所选目录下所有的文件夹及文件

Dim tb As Table = Tables("文件管理_Table1")
Dim rdid, pid, ri As Integer
Dim sfl As String
rdid = tb.Current("did")
pid = tb.Current("childid")
sfl = tb.Current("分类")
Dim dlg As New FolderBrowserDialog
dlg.ShowNewFolderButton = True 
If dlg.ShowDialog = DialogResult.Ok Then
    Syscmd.GridTree.AddChild()
    Dim mr As Row = tb.Current 
    mr.DataRow.Save 
    mr("扩展名") = "文件夹"
    Dim dds() As String = dlg.SelectedPath.Split ("\")
    Dim dd As String = dds(dds.Length - 1)
    mr("文件名") = dd
    mr("分类") = sfl
    mr("childid") = mr("_Identify")
    mr("did") = rdid
    mr("parentid") = pid
    mr ("单位") = Tables("one").rows(0)("单位")
    mr ("操作员") = Tables("one").rows(0)("操作员")
    Dim si As String
    Dim ii As Integer
    For Each fl As String In FileSys.GetFiles(dlg.SelectedPath)
        ii = ii + 1
        Syscmd.GridTree.AddSlibing()
        Dim r As Row = tb.Current 
        r.DataRow.Save 
        r("parentid") = mr("childid")
        r("childid") = r("_Identify")
        r("did") = rdid
        Dim ifo As New FileInfo(fl) 
        Dim ss() As String = ifo.Name.Split(".")
        Dim ffd As DataRow = tb.DataTable.SQLFind ("文件名='" & ss(ss.Length - 2) & "' and 扩展名='." & ss(ss.Length - 1) & "'and parentid=" & pid)
        If ffd IsNot Nothing Then '如果找到的话
            MessageBox.Show(ss(ss.Length - 2) & "." & ss(ss.Length - 1) & "  该文件名已经存在")
            r.Delete
            tb.DataTable.Save
            Return
        End If
        r("分类") = sfl
        r("文件名") = ss(ss.Length - 2)
        r("扩展名") = ifo.Extension
        
        Dim i As Integer = ifo.Length
        If i < 1024 Then
            si = i & " B"
        ElseIf 1048576 > i AndAlso i >= 1024 Then
            si = round2(i / 1024, 2) & " KB"
        ElseIf 1073741824 > i AndAlso i >= 1048576 Then
            si = round2(i / 1024 / 1024, 2) & " MB"
        ElseIf 1099511627776 > i AndAlso i >= 1073741824 Then
            si = round2(i / 1024 / 1024 / 1024, 2) & " GB"
        End If
        r("大小") = si
        r ("单位") = Tables("one").rows(0)("单位")
        r ("操作员") = Tables("one").rows(0)("操作员")
        ShowWaitDialog(New Operation(Function() As Boolean '等待开始
        r.DataRow.SQLInsertFile("fl", fl) '插入文件
        End Function), Nothing) '等待结束'   
        Next
        MessageBox.Show ("已成功上传 " & ii & " 个文件")
        tb.DataTable.Save
    End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/5 10:25:00 [只看该作者]

上传到哪里?

 回到顶部
帅哥哟,离线,有人找我吗?
fvcfox
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:二尾狐 帖子:571 积分:5432 威望:0 精华:0 注册:2020/5/7 13:05:00
  发帖心情 Post By:2022/8/5 10:30:00 [只看该作者]

是将所选目录及其文件名称写到table,并将文件以二进制上传到"“FL”字段,目前代码只能实现所选目录第一级,不知道怎样现实包括以下的所有文件夹及文件

 回到顶部
帅哥哟,离线,有人找我吗?
有点蓝
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:110574 积分:562760 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2022/8/5 10:57:00 [只看该作者]

使用递归:http://www.foxtable.com/webhelp/topics/2416.htm

假设函数名称:abc,函数内容

dim dir as string
For Each fl As String In FileSys.GetFiles(dir)
对文件的处理
next
For Each dir2 As String In FileSys.GetDirectories(dir) 如果有子目录
  
Functions.Execute("abc",dir2 
Next

1楼代码改改
……
        r ("操作员") = Tables("one").rows(0)("操作员")
        ShowWaitDialog(New Operation(Function() As Boolean '等待开始
        r.DataRow.SQLInsertFile("fl", fl) '插入文件
        End Function), Nothing) '等待结束'   
        Next
        MessageBox.Show ("已成功上传 " & ii & " 个文件")
For Each dir2 As String In FileSys.GetDirectories(dlg.SelectedPath)
  
Functions.Execute("abc",dir2 )
Next
        tb.DataTable.Save
    End If


 回到顶部