注册 登录
编程论坛 VB6论坛

如何得到N层目录的最后一层?

ictest 发布于 2017-08-28 13:10, 2195 次点击
例如目录路径为“C:\Documents and Settings\Administrator\桌面\数据\AAAA\BBBB\”,如何在text中得到“BBBB”?

或者说字符串“C:\Documents and Settings\Administrator\桌面\数据\AAAA\BBBB\”,如何在text中得到“BBBB”?

需要注意的是,目录层数不一定。
5 回复
#2
ictest2017-08-28 13:39
经过自己的琢磨,已经自己解决了。

Dim ss2() As String

ss2 = Split(Text1.Text, "\")

MsgBox = ss2(Len(Text1.Text) - Len(Replace(Text1.Text, "\", "")) - 1)
#3
风吹过b2017-08-28 16:48
直接显示,就是一行代码。当然,你的也只是二行代码
'从右第二个字符向左查找 \ 。然后从这个位置+1取字符串。 replace 是去掉可能存在的 \
MsgBox Replace(Mid(s, InStrRev(s, "\", Len(s) - 1) + 1), "\", "")


注:
1、s 等于你的 text1.text
2、如果定义为变量的话,就不要使用 replace ,而使用 IF 去掉。二行代码
  s2 = Mid(s, InStrRev(s, "\", Len(s) - 1) + 1)           '得到路径
  If Right(s2, 1) = "\" Then s2 = Left(s2, Len(s2) - 1)   '去尾部 \

3、你的代码发现BUG。
  当输入的路径没有最后的 \  时,你的代码结果错误。
  如输入:C:\Documents and Settings\Administrator\桌面\数据\AAAA\BBBB 时,
  你的代码返回 AAAA 。

4、你的代码修改:
第一行不变。第二行,如果是直接显示,那么改成:
ss2 = Split(text1.text, "\")
MsgBox IIf(ss2(UBound(ss2)) = "", ss2(UBound(ss2) - 1), ss2(UBound(ss2)))   '如果最后一个元素为空白,返回前一个元素,否则返回最后一个元素

如果给变量,用IF语句重写吧。IIF命令开销更大,它是函数。
程序代码:
If ss2(UBound(ss2)) = "" Then
    s2 = ss2(UBound(ss2) - 1)
Else
    s2 = ss2(UBound(ss2))
End If








[此贴子已经被作者于2017-8-28 16:54编辑过]

#4
xiangyue05102017-08-28 17:17
同意风版的方法,直接用InStrRev查找最后一个“/”(如果路径最后是“/”,那就是找最后第二个)
#5
mclhr19962017-09-18 11:14
    s = "c:\aa\bb\"
        ary = Split(s, "\")
        MsgBox ary(UBound(ary) - 1)
#6
csl5912017-12-11 14:14
5楼的代码最简洁。
1