请问如何逐个提取出一个目录下的每个文件名?

解决方案 »

  1.   

    Public Function Get_Files(sfilespec As String, Optional Attributes As _
                                                VbFileAttribute) As String()
        Dim sresult()                   As String
        Dim sFileName                   As String
        Dim lcount                      As Long
        Dim spath2                      As String
        Dim lcheck                      As Long
        
        lcheck = 50
        ReDim sresult(0 To lcheck) As String
        sFileName = Dir$(sfilespec, Attributes)
        Do While Len(sFileName)
            lcount = lcount + 1
            If lcount > UBound(sresult) Then
                'Resize the result array if necessary
                ReDim Preserve sresult(0 To lcount + lcheck) As String
            End If
            sresult(lcount) = sFileName
            'Get ready for next iteration
            sFileName = Dir$
        Loop
        'Trim the result array
        ReDim Preserve sresult(0 To lcount) As String
        Get_Files = sresult
    End Function
    dim sTemp_File_list()  as string
    sTemp_File_list() = Get_Files("c:\aaa" & "\*.*", vbNormal)
      

  2.   

    'Create a form with a command button (command1), a list box (list1)
    'and four text boxes (text1, text2, text3 and text4).
    'Type in the first textbox a startingpath like c:\
    'and in the second textbox you put a pattern like *.* or *.txtPrivate Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
    Private Declare Function GetFileAttributes Lib "kernel32" Alias "GetFileAttributesA" (ByVal lpFileName As String) As Long
    Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As LongConst MAX_PATH = 260
    Const MAXDWORD = &HFFFF
    Const INVALID_HANDLE_VALUE = -1
    Const FILE_ATTRIBUTE_ARCHIVE = &H20
    Const FILE_ATTRIBUTE_DIRECTORY = &H10
    Const FILE_ATTRIBUTE_HIDDEN = &H2
    Const FILE_ATTRIBUTE_NORMAL = &H80
    Const FILE_ATTRIBUTE_READONLY = &H1
    Const FILE_ATTRIBUTE_SYSTEM = &H4
    Const FILE_ATTRIBUTE_TEMPORARY = &H100Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
    End TypePrivate Type WIN32_FIND_DATA
        dwFileAttributes As Long
        ftCreationTime As FILETIME
        ftLastAccessTime As FILETIME
        ftLastWriteTime As FILETIME
        nFileSizeHigh As Long
        nFileSizeLow As Long
        dwReserved0 As Long
        dwReserved1 As Long
        cFileName As String * MAX_PATH
        cAlternate As String * 14
    End Type
    Function StripNulls(OriginalStr As String) As String
        If (InStr(OriginalStr, Chr(0)) > 0) Then
            OriginalStr = Left(OriginalStr, InStr(OriginalStr, Chr(0)) - 1)
        End If
        StripNulls = OriginalStr
    End FunctionFunction FindFilesAPI(path As String, SearchStr As String, FileCount As Integer, DirCount As Integer)
        'KPD-Team 1999
        'E-Mail: [email protected]
        'URL: http://www.allapi.net/    Dim FileName As String ' Walking filename variable...
        Dim DirName As String ' SubDirectory Name
        Dim dirNames() As String ' Buffer for directory name entries
        Dim nDir As Integer ' Number of directories in this path
        Dim i As Integer ' For-loop counter...
        Dim hSearch As Long ' Search Handle
        Dim WFD As WIN32_FIND_DATA
        Dim Cont As Integer
        If Right(path, 1) <> "\" Then path = path & "\"
        ' Search for subdirectories.
        nDir = 0
        ReDim dirNames(nDir)
        Cont = True
        hSearch = FindFirstFile(path & "*", WFD)
        If hSearch <> INVALID_HANDLE_VALUE Then
            Do While Cont
            DirName = StripNulls(WFD.cFileName)
            ' Ignore the current and encompassing directories.
            If (DirName <> ".") And (DirName <> "..") Then
                ' Check for directory with bitwise comparison.
                If GetFileAttributes(path & DirName) And FILE_ATTRIBUTE_DIRECTORY Then
                    dirNames(nDir) = DirName
                    DirCount = DirCount + 1
                    nDir = nDir + 1
                    ReDim Preserve dirNames(nDir)
                End If
            End If
            Cont = FindNextFile(hSearch, WFD) 'Get next subdirectory.
            Loop
            Cont = FindClose(hSearch)
        End If
        ' Walk through this directory and sum file sizes.
        hSearch = FindFirstFile(path & SearchStr, WFD)
        Cont = True
        If hSearch <> INVALID_HANDLE_VALUE Then
            While Cont
                FileName = StripNulls(WFD.cFileName)
                If (FileName <> ".") And (FileName <> "..") Then
                    FindFilesAPI = FindFilesAPI + (WFD.nFileSizeHigh * MAXDWORD) + WFD.nFileSizeLow
                    FileCount = FileCount + 1
                    List1.AddItem path & FileName
                End If
                Cont = FindNextFile(hSearch, WFD) ' Get next file
            Wend
            Cont = FindClose(hSearch)
        End If
        ' If there are sub-directories...
        If nDir > 0 Then
            ' Recursively walk into them...
            For i = 0 To nDir - 1
                FindFilesAPI = FindFilesAPI + FindFilesAPI(path & dirNames(i) & "\", SearchStr, FileCount, DirCount)
            Next i
        End If
    End Function
    Sub Command1_Click()
        Dim SearchPath As String, FindStr As String
        Dim FileSize As Long
        Dim NumFiles As Integer, NumDirs As Integer
        Screen.MousePointer = vbHourglass
        List1.Clear
        SearchPath = Text1.Text
        FindStr = Text2.Text
        FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
        Text3.Text = NumFiles & " Files found in " & NumDirs + 1 & " Directories"
        Text4.Text = "Size of files found under " & SearchPath & " = " & Format(FileSize, "#,###,###,##0") & " Bytes"
        Screen.MousePointer = vbDefault
    End Sub
      

  3.   

    但是我事先不知道文件是什么,我要逐个用二进制读到ACCESS里,所以要逐个取文件名
      

  4.   

    用file控件或者filesystemobject对象
      

  5.   

    用file控件
    file1.path="c:\aa"
    具体的用法你查一下帮助
      

  6.   

    dir就可以啊
    不是那个Dos命令啊:)
      

  7.   

    Mark一下,这正是我想知道的。
      

  8.   

    用file控件
    file1.path="c:\"
    s=""
    for i=0 to file1.listcount-1
      s=s & file1.list(i) & vbcrlf
    next
    msgbox s
      
    在VB6+WIN2000下测试通过 2003.12.24
      

  9.   

    用dir就可以了,弄个循环,直到dir返回的名称为空
      

  10.   

    其实用dir就足够了,不够用FSO容易一些:
    Private Sub Command1_Click()
    '首先加入对Microsoft Scripting Runtime的引用
        Dim FSO As New FileSystemObject
        Dim mfolder As Folder
        Dim mfile As File
        Set mfolder = FSO.GetFolder("d:\mc")
        For Each mfile In mfolder.Files
          Debug.Print mfile.Name
        Next
        Set mfile = Nothing
        Set mfolder = Nothing
        Set FSO = NothingEnd Sub