以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  指定的路径或文件名太长  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=131515)

--  作者:淡月斜阳
--  发布时间: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个字符。


--  作者:有点甜
--  发布时间:2019/2/28 12:28:00
--  

msgbox(FPath)

 

msgbox(file)

 

分别弹出什么?

 

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


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

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

 

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

 

1、你可以用try catch

 

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

 

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


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

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

 

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

 

msgbox(FPath)

 

msgbox(file)

 

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