Results 1 to 6 of 6

Thread: [RESOLVED] Search files in directory

  1. #1

    Thread Starter
    Frenzied Member
    Join Date
    Feb 2007
    Location
    Malaysia
    Posts
    1,370

    Resolved [RESOLVED] Search files in directory

    I have two files in this location

    1) C:\DATABASE\SAWAHSEMPADAN\DATA\Soil.shp

    2) C:\DATABASE\SAWAHSEMPADAN\DATA\LOT\Soil.shp

    When I used code below to search files in the directory and sub directory,it able to found only one files in the parent directory. It suppose found two files in the directory. Why could be like this?


    Code:
    Private Declare Function SearchTreeForFile Lib "imagehlp" _
    (ByVal RootPath As String, ByVal InputPathName As String, _
    ByVal OutputPathBuffer As String) As Long
    Private Const MAX_PATH = 260
    
    Private Sub Command1_Click()
    Dim tempstr As String, ret As Long
    tempstr = String(MAX_PATH, 0)
    'Search files in directory and sub directory
    ret = SearchTreeForFile("C:\DATABASE\", TextBox2.Text + ".shp", tempstr) 'search data shapefile
    If ret <> 0 Then 'If data found
    Call Insertsub(tempstr)
    End If
    End Sub
    Private Sub Insertsub(tempstr As String)
    Dim i As Long
    Dim sName() As String
    Dim sPath As String
    Dim inti As Integer
    sName = Split(tempstr, "\") 'contains File name'
    inti = UBound(sName)
    'search file name dan show filename with extension dan path location dalam listview
    Dim lvItem As ListItem
    Set lvItem = ListView1.ListItems.Add(, , sName(inti))
    lvItem.ListSubItems.Add , , "" & GetDirFromFile(tempstr)
    TextBox3.Text = sName(inti) 'name
    TextBox4.Text = GetDirFromFile(tempstr) 'path location
    End Sub
    Public Function GetDirFromFile(fileName As String) As String
       GetDirFromFile = Left(fileName, InStrRev(fileName, "\"))
    End Function
    Last edited by matrik02; Jun 11th, 2008 at 09:07 AM.

  2. #2
    Hyperactive Member
    Join Date
    Aug 2007
    Posts
    269

    Re: Seach files in directory

    SearchTreeForFile finds the first occurance by the looks of it mate. Try this:
    Code:
    '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 *.txt
    
    Private 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 Long
    
    Const 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 = &H100
    
    Private Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
    End Type
    
    Private 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 Function
    
    Function 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. #3
    I'm about to be a PowerPoster! Hack's Avatar
    Join Date
    Aug 2001
    Location
    Searching for mendhak
    Posts
    58,333

    Re: Seach files in directory

    Quote Originally Posted by Moorzee
    SearchTreeForFile finds the first occurance by the looks of it mate.
    That is correct. It won't find multiple copies of the same file name.

  4. #4

    Thread Starter
    Frenzied Member
    Join Date
    Feb 2007
    Location
    Malaysia
    Posts
    1,370

    Re: Seach files in directory

    Oh that works great.. It like scanner..

    The code helps me a alot . I would like do something like this...

    When I input the files name in the textbox.. It scan the directory "C:\DATABASE\SAWAHSEMPADAN\DATA" and show me the files location in the listbox if found..

    Code below scan all files in the directory for *.txt pattern. I change to textbox1 to "C:\DATABASE\SAWAHSEMPADAN\DATA"

  5. #5
    Hyperactive Member
    Join Date
    Aug 2007
    Posts
    269

    Re: Seach files in directory

    Just type filename and extension instead of widcard. It will find the location of those files.

  6. #6

    Thread Starter
    Frenzied Member
    Join Date
    Feb 2007
    Location
    Malaysia
    Posts
    1,370

    Re: Seach files in directory

    Ok.. Thank you so much!!! It really help me.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width