Office中国论坛/Access中国论坛

标题: 请文怎么查找列举出文件的绝对路径? [打印本页]

作者: today416    时间: 2008-12-24 19:55
标题: 请文怎么查找列举出文件的绝对路径?
我想问的不是查找已知文件名的文件,而是想把某个打开的文件夹下所有的文件的绝对路径全部都显示列举出来,以便程序进一步的应用,谢谢~
作者: Henry D. Sy    时间: 2008-12-24 20:12
想把某个打开的文件夹下所有的文件的绝对路径全部都显示列举出来
是不是列举该文件夹下的所有文件和子文件夹下的所有文件。
作者: Henry D. Sy    时间: 2008-12-24 21:18
需要引用 Microsoft Scripting Runtime

1. 建一个窗体,上面放置文本框一个,名字为“驱动器名”,按钮一个,名字“command2”,列表框一个,名字“List3”
2. 输入下面的代码试试。

  1. Private Sub Command2_Click()

  2.     Dim myDrive As String
  3.     Dim Fs As New FileSystemObject
  4.     Dim Fd As Folder, F As File

  5.     On Error Resume Next

  6.     myDrive = Trim(Me.驱动器名)
  7.     If myDrive = "" Then
  8.         MsgBox "请输入欲显示文件的驱动器名"
  9.         Me.驱动器名.SetFocus
  10.         Exit Sub
  11.     End If
  12.     If Right(myDrive, 2) <> ":" Then
  13.         myDrive = myDrive & ":"
  14.     End If
  15.     Set Fd = Fs.GetFolder(myDrive)
  16.     Me.List3.RowSource = ""
  17.     For Each F In Fd.Files
  18.         If (Not ((F.Attributes And System) = System) And (Not (F.Attributes And Hidden) = Hidden)) Then
  19.             Me.List3.AddItem F.Name
  20.         End If
  21.     Next
  22.     MsgBox "Finish"
  23. End Sub

  24. Private Sub Form_Load()
  25.     Me.List3.RowSourceType = "Value List"
  26.     Me.List3.RowSource = ""
  27. End Sub
复制代码

作者: today416    时间: 2008-12-25 09:12
多谢斑竹,但是我试了后发现有两个问题:
1.好像只可以运用于各个盘的根目录,例如D盘根目录下的文件,如果想列举D:\某文件夹,下的文件就不可以
2.列举出C盘根目录下的文件不是很全,好像很多系统文件列举不出来,例如BOOT。ini,ntldrd等文件
请问斑竹怎么解决?
作者: today416    时间: 2008-12-25 09:25
斑竹我看了下代码,知道第二个问题怎么解决了,但是第一个问题还是不懂?
作者: Henry D. Sy    时间: 2008-12-25 09:28
原帖由 today416 于 2008-12-25 09:25 发表
斑竹我看了下代码,知道第二个问题怎么解决了,但是第一个问题还是不懂?


需要引用 Microsoft Scripting Runtime,Office 11


  1. Private Sub Command2_Click()
  2.     Dim diaFS As FileDialog
  3.     On Error GoTo Command2_Click_Error

  4.     Set diaFS = Application.FileDialog(msoFileDialogFolderPicker)
  5.     With diaFS
  6.         .AllowMultiSelect = False
  7.         .Show
  8.     End With
  9.     If diaFS.SelectedItems.Count > 0 Then
  10.         Me.Text0 = diaFS.SelectedItems(1)
  11.     Else
  12.         Me.Text0 = ""
  13.     End If

  14.     On Error GoTo 0
  15.     Exit Sub

  16. Command2_Click_Error:

  17.     MsgBox "Error " & Err.Number & " " & Err.Description
  18. End Sub

  19. Private Sub Command7_Click()
  20.     Dim fs As New FileSystemObject
  21.     Dim fd As Folder
  22.     Dim f As File
  23.     On Error GoTo Command0_Click_Error
  24.     If IsNull(Me.Text0) Then
  25.         MsgBox "请输入文件夹"
  26.         Me.Text0.SetFocus
  27.         Exit Sub
  28.     End If
  29.     Me.List10.RowSource = ""
  30.     Set fd = fs.GetFolder(Me.Text0)
  31.     For Each f In fd.Files
  32.         Me.List10.AddItem f.Name
  33.     Next

  34.     On Error GoTo 0
  35.     Exit Sub

  36. Command0_Click_Error:

  37.     MsgBox "Error " & Err.Number & " " & Err.Description
  38. End Sub

  39. Private Sub Form_Load()
  40.     Me.List10.RowSourceType = "Value List"
  41.     Me.List10.RowSource = ""
  42. End Sub
复制代码

作者: Henry D. Sy    时间: 2008-12-25 09:32
If diaFS.SelectedItems.Count > 0 Then
        Me.Text0 = diaFS.SelectedItems(1)
    Else
        Me.Text0 = ""
    End If
上面这一句中,Me.Text0 = "",应该更改为 Me.Text0 = null,刚才一路写代码没注意。[:31]
作者: today416    时间: 2008-12-25 10:40
多谢斑竹,再试了下,发现一个BUG
如果文本框中输入 c:\     则显示正确的文件,但是如果输入 c: (注意,没有斜杠),则也会列举出很多文件,但我看了,显然不是c盘根目录下的文件,但是d:\与d:  e:\与e:确不存在这样的问题

另外我还想请教下斑竹,如果我想不仅列出文件夹下的文件,而且想把文件夹下的文件夹(即子文件夹)的名字也列举出来,而且列举出来能区分哪个是文件哪个是文件夹,如何写代码?
作者: Henry D. Sy    时间: 2008-12-25 10:44
问题1
你可以用文本框边上的按钮选择文件夹(刚才忘了锁定它)
问题2.
估计要写个递归函数过程。
作者: today416    时间: 2008-12-25 10:50
斑竹能不能帮忙写个哦,小弟不会,特别是对操作文件之类的东东
作者: Henry D. Sy    时间: 2008-12-25 22:08
原帖由 today416 于 2008-12-25 10:50 发表
斑竹能不能帮忙写个哦,小弟不会,特别是对操作文件之类的东东
  1. Private Sub Command7_Click()
  2.     Dim fs As New FileSystemObject
  3.     Dim fd As Folder
  4.     Dim sfd As Folder
  5.     If IsNull(Me.Text0) Then
  6.         MsgBox "请输入文件夹"
  7.         Me.Text0.SetFocus
  8.         Exit Sub
  9.     End If
  10.     Me.List10.RowSource = ""
  11.     Set fd = fs.GetFolder(Me.Text0)
  12.     ListFolder fd
  13. End Sub

  14. Sub ListFolder(fd As Folder)
  15.     Dim sfd As Folder
  16.     Dim f As File
  17.     For Each f In fd.Files
  18.         List10.AddItem f.Path
  19.     Next
  20.     For Each sfd In fd.SubFolders
  21.         List10.AddItem sfd.Path
  22.         ListFolder sfd
  23.     Next
  24. End Sub
复制代码





欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3