Foxtable(狐表)用户栏目专家坐堂 → 指定的路径或文件名太长


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

主题:指定的路径或文件名太长

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


加好友 发短信
等级:童狐 帖子:223 积分:1960 威望:0 精华:0 注册:2015/4/8 8:18:00
指定的路径或文件名太长  发帖心情 Post By:2019/2/28 12:21:00 [只看该作者]

For Each File As String In FileSys.GetFiles(FPath)
    Application.DoEvents
    '终止执行
    If GetFileEnable = 0 Then : Return 0 : End If
    Dim ifo As new FileInfo(file)
    Dim r1 As DataRow
    If SameNameEnable=1 Then '允放同名
        r1 = tb.DataTable.Find("文件名='" & Ifo.Name & "' and 路径='" &  Ifo.Path & "'")
    Else '不允许同名
        r1= tb.DataTable.Find("文件名='" & Ifo.Name & "'")
    End If
    '如果表中已存在记录,或,扩展名不匹配,则跳过.
    Vars("FileCounts")=Vars("FileCounts")+1 '遍历的文件数
    If r1 IsNot Nothing OrElse Array.indexof(FExtensions, ifo.Extension.ToLower) < 0 Then
        StatusBar.Message2= "进度:" & Ifo.Name
        Continue For
    End If
    
    Dim r As Row=tb.AddNew
    Dim max As String = tb.DataTable.Compute("max(id)")
    Dim idx As Integer
    'ID赋值
    If max > "" Then
        idx =Cint( max.SubString(3,6)) + 1
    Else
        idx = 1
    End If
    r("ID")="BH-" & Format(idx,"000000")
    r("文件名")=ifo.Name
    r("后缀名")=ifo.Extension
    r("大小")= CInt(ifo.Length/1024/1024)
    r("路径")=Ifo.Path
    r("创建时间")=ifo.CreationTime
    r("上次修改时间")=Ifo.LastWriteTime
    r("上次访问时间")=Ifo.LastAccessTime
    If UpdateScreenEnable = 0 Then '是否即时保存,是
        r.Save
    End If
    Vars("FileCount")=Vars("FileCount")+1 '合规的文件数
Next


报错:指定的路径或文件名太长,或两者都太长,完全限定文件名必须少于260个字符,并且目录名必须少于248个字符。


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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/28 12:28:00 [只看该作者]

msgbox(FPath)

 

msgbox(file)

 

分别弹出什么?

 

报错的意思是,你设置的文件的路径,如 d:\test.jpg 超过了248个字符,就会报错。


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


加好友 发短信
等级:童狐 帖子:223 积分:1960 威望:0 精华:0 注册:2015/4/8 8:18:00
  发帖心情 Post By:2019/2/28 12:33:00 [只看该作者]

这个函数是递归的。
有些文件是由系统或其他文件创建的,路径很长。
怎么屏蔽这个报错,直接跳过去,进入下一循环

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/28 12:35:00 [只看该作者]

以下是引用淡月斜阳在2019/2/28 12:33:00的发言:
这个函数是递归的。
有些文件是由系统或其他文件创建的,路径很长。
怎么屏蔽这个报错,直接跳过去,进入下一循环

 

那就是你递归代码写错了导致的。

 

1、你可以用try catch

 

http://www.foxtable.com/webhelp/scr/2070.htm

 

2、具体做个出错的例子发上来测试


 回到顶部
帅哥哟,离线,有人找我吗?
淡月斜阳
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:童狐 帖子:223 积分:1960 威望:0 精华:0 注册:2015/4/8 8:18:00
  发帖心情 Post By:2019/2/28 12:40:00 [只看该作者]

函数递归也没错,正常情况不报错。
如果指定的获取文件夹,名称太长,比如有些游戏软件,它的文件夹或文件名很长,就会报错。
或者是指到C盘,windows下的。

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/2/28 12:58:00 [只看该作者]

以下是引用淡月斜阳在2019/2/28 12:40:00的发言:
函数递归也没错,正常情况不报错。
如果指定的获取文件夹,名称太长,比如有些游戏软件,它的文件夹或文件名很长,就会报错。
或者是指到C盘,windows下的。

 

1、弹出合成的字符是否正确

 

msgbox(FPath)

 

msgbox(file)

 

2、操作系统的文件路径,是不会超过248个字符的。


 回到顶部