Results 1 to 3 of 3

Thread: Locate where is a file without know its drive and its path.

  1. #1

    Thread Starter
    Member
    Join Date
    Jun 2000
    Location
    France
    Posts
    51

    Question Locate where is a file without know its drive and its path.

    Hello

    This is a project to find where is a file.

    But I want to know how to locate a file when I don't know its drive and its path (such as Start/Find/Find Files function).

    Can you help me for my request ?

    Thank you very much.



    Declare Function FindFirstFile Lib "kernel32" Alias _
    "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData _
    As WIN32_FIND_DATA) As Long

    Declare Function FindNextFile Lib "kernel32" Alias _
    "FindNextFileA" (ByVal hFindFile As Long, _
    lpFindFileData As WIN32_FIND_DATA) As Long

    Declare Function GetFileAttributes Lib "kernel32" Alias _
    "GetFileAttributesA" (ByVal lpFileName As String) As Long

    Declare Function FindClose Lib "kernel32" (ByVal hFindFile _
    As Long) As Long

    Public Const MAX_PATH = 260
    Public Const MAXDWORD = &HFFFF
    Public Const INVALID_HANDLE_VALUE = -1
    Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
    Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
    Public Const FILE_ATTRIBUTE_HIDDEN = &H2
    Public Const FILE_ATTRIBUTE_NORMAL = &H80
    Public Const FILE_ATTRIBUTE_READONLY = &H1
    Public Const FILE_ATTRIBUTE_SYSTEM = &H4
    Public Const FILE_ATTRIBUTE_TEMPORARY = &H100

    Type FILETIME
    dwLowDateTime As Long
    dwHighDateTime As Long
    End Type

    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

    Public 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

    Option Explicit

    Function FindFilesAPI(path As String, SearchStr As String, _
    FileCount As Integer, DirCount As Integer)

    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

    Private Sub cmdFind_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 = txtPath.Text
    FindStr = txtSearch.Text
    FileSize = FindFilesAPI(SearchPath, FindStr, NumFiles, NumDirs)
    txtNum.Text = NumFiles & " Files found in " & NumDirs + 1 & _
    " Directories"
    txtSize.Text = "Size of files found under " & SearchPath & " = " & _
    Format(FileSize, "#,###,###,##0") & " Bytes"
    Screen.MousePointer = vbDefault
    End Sub

  2. #2
    Frenzied Member Vlatko's Avatar
    Join Date
    Aug 2000
    Location
    Skopje, Macedonia
    Posts
    1,409
    Have a look at
    http://www.mvps.org/vbnet

    They have a lot of file searching routines
    I am become death, the destroyer of worlds.
    mail:[email protected]

    • Visual Basic 6.0 & .NET
    • Visual C++ 6.0 & .NET
    • ASP
    • LISP
    • PROLOG
    • C
    • Pascal

  3. #3

    Thread Starter
    Member
    Join Date
    Jun 2000
    Location
    France
    Posts
    51

    Smile This is the result !


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