Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    [VB6] Cercare un file con la funzione Dir

    Ciao amici,
    vorrei sapere come posso fare una ricerca di un file nel pc con la funzione Dir e vorrei che mi venisse scritto in una variabile anche il percorso del file. Chi mi dà una mano?
    Grazie.
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  2. #2
    La funzione Dir è formata da due argomenti: il primo è il pathname, ossia l'indirizzo del file da cercare tra virgolette, e il secondo che si riferisce al tipo di file (archivio,system,nascosto,normal ecc.).

    Msgbox Dir("C:\FILE da Cercare",vbnormal)

    Se il file esiste, allora ritorna l'indirizzo del file cercato, altrimenti restituisce la stringa nulla.....ciao...

    ps prova a consultare anche la guida in linea MSDN

  3. #3
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Ciao, se devi cercare un file o più files, e non sai il percorso, ti conviene lasciar perdere la funzione Dir e usare queste api:
    codice:
    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
    Jupy

  4. #4
    Ciao Giorgiogior48, se vuoi provare da solo con l'aiuto (tra l'altro esatto) di jupy fai pure..altrimenti ti posso postare un codice abbastanza semplice ed efficacie così poi lo puoi studiare tranquillamente..fammi sapere..ciao

  5. #5
    Grazie a tutti per gli interventi.

    Jupy64, non mi accetta il tipo di dati WIN32_FIND_DATA. Poi forse devo aggiungere qualcoasa io ma non mi intendo di API.
    Io ho risolto in un certo modo, ma devo inserire i percorsi dei file da cercare. Se avete di meglio bene.
    Grazie.
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  6. #6
    Ci credo che non te li trova: devi caricare la schermata con le API di Windows, poi cercare il Type con quel nome..cmq io ti posto un codice ok, anche se poi non ci capirai molto (senza offesa, solo per il fatto che non conosci le API ed il loro uso).

    Inserisci in un form: 1 listbox, 4 textbox , 1 commandbutton

    codice:
    Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long 
    
    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)
        
    
        Dim FileName As String 
        Dim DirName As String 
        Dim dirNames() As String 
        Dim nDir As Integer 
        Dim i As Integer 
        Dim hSearch As Long 
        Dim WFD As WIN32_FIND_DATA
        Dim Cont As Integer
        If Right(path, 1) <> "\" Then path = path & "\"
            nDir = 0
        ReDim dirNames(nDir)
        Cont = True
        hSearch = FindFirstFile(path & "*", WFD)
        If hSearch <> INVALID_HANDLE_VALUE Then
            Do While Cont
            DirName = StripNulls(WFD.cFileName)
                    If (DirName <> ".") And (DirName <> "..") Then
                
                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
        
        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 nDir > 0 Then
            
            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
    Ciao

  7. #7
    Utente di HTML.it L'avatar di Jupy64
    Registrato dal
    Sep 2004
    Messaggi
    1,151
    Originariamente inviato da giorgiogio48
    Grazie a tutti per gli interventi.

    Jupy64, non mi accetta il tipo di dati WIN32_FIND_DATA. Poi forse devo aggiungere qualcoasa io ma non mi intendo di API.
    Io ho risolto in un certo modo, ma devo inserire i percorsi dei file da cercare. Se avete di meglio bene.
    Grazie.
    Il codice passato da MdE2005 lo puoi usare come esempio di prova e adattarlo alle tue esigenze. Comunque un buon sito per le api e dove puoi scaricarti un programma..per la consultazione e esempi di ulitizzo, è questo: http://www.mentalis.org/index2.shtml
    Jupy

  8. #8
    Ringrazio tutti. Però il codice di MdE2005 è troppo complicato, per ora, per me e non mi funziona. Ciao
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  9. #9
    Originariamente inviato da giorgiogio48
    Ringrazio tutti. Però il codice di MdE2005 è troppo complicato, per ora, per me e non mi funziona. Ho risolto diversamente. Ciao
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

  10. #10
    Ho risolto diversamente. Grazie lo stesso.
    Giorgio
    L'esperienza è il tipo di insegnante più difficile. Prima ti fa l'esame, e poi ti spiega la lezione. (Oscar Wilde)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.