Private Sub Command1_Click()
  
    Dim s, p As String
    CommonDialog1.FileName = ""
    CommonDialog1.Filter = "*.csv"
    CommonDialog1.Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer
    
    CommonDialog1.MaxFileSize = 32767
    CommonDialog1.ShowOpen
    If CommonDialog1.FileName <> "" Then
        List1.Clear
        Insert_Text (CommonDialog1.FileName)'插入到文本框
        p = Split(CommonDialog1.FileName, vbNullChar)(0)
        For Each s In Split(CommonDialog1.FileName, vbNullChar)
            List1.AddItem p & s
        Next
        List1.RemoveItem 0
    End If
End Sub运行结果是
        Insert_Text (CommonDialog1.FileName)'插入到文本框
这里的CommonDialog1.FileName是
I:\89a226490b99253b15eb\i386List1里显示的是
List1里的路径就不对了i386之后应该有个\,但是这里没有,之后就没法获取正确的路径我这样调用有问题 吗?我想可能是For Each s In Split(CommonDialog1.FileName, vbNullChar)这里的问题。我这个从百度找的,我不理解为什么要加vbNullChar求解决方法

解决方案 »

  1.   

    本来就没那个"\",如果非要加上,List1.AddItem p & s
    连上个就是
    List1.AddItem p & s & "\"就是了
      

  2.   

    你这个是 "复选" 文件, 每个文件是以 Chr(0)隔开的, 如果只选定一个文件, 则直接使用数组第一个元素就对啦, 但是如果选了2个以上, 则数组0将存放的是选定的"路径",之后都是不带路径的文件名至于你说的少了\ 这个你得先判断 S(0) 最右边是否为 \ 如代码中的这行就是判断\S(0) = IIf(Right(S(0), 1) = "\", S(0), S(0) & "\")'添加 List1  Command1  CommonDialog1Option Explicit '强制宣告定义变量
    Dim SelectFile$, i%, PathList$(), S '定义变量
    Private Sub Command1_Click()
       On Error GoTo Errh
       CommonDialog1.FileName = ""
       With CommonDialog1
          .DialogTitle = "请选择文件"
          .CancelError = True
          .Filter = "图片格式(*.bmp;*.jpg;*.gif;*.png;*.ico)|*.bmp;*.jpg;*.gif;*.png;*.ico|位图格式(*.bmp)|*.bmp|GIF格式(*.gif)|*.gif|JPEG格式(*.jpg)|*.jpg|PNG格式(*.png)|*.png"
          .Flags = cdlOFNAllowMultiselect Or cdlOFNExplorer '复选文件必加
          .MaxFileSize = 32767
          .ShowOpen
       End With
       SelectFile = CommonDialog1.FileName
       List1.Clear
       S = Split(SelectFile, Chr(0))
       ReDim Preserve PathList$(UBound(S))
       '*******************************************************************************
       If UBound(S) = 0 Then
          List1.AddItem S(0)  'CommonDialog1.FileTitle
          PathList(0) = S(0)
       Else
          S(0) = IIf(Right(S(0), 1) = "\", S(0), S(0) & "\")
          For i = 1 To UBound(S)
             List1.AddItem S(0) & S(i)
             PathList(i - 1) = S(0) & S(i)
          Next i
       End If
    Errh:
       If Err > 0 Then Exit Sub
    End SubPrivate Sub List1_Click()
       MsgBox PathList(List1.ListIndex)
    End Sub
      

  3.   

    嗯,有道理,确实本来就没有\
    不过也不是List1.AddItem p & s & "\" 而是List1.AddItem p & "\" & s 谢谢 给分结贴