Newsgroup: it.comp.lang.visual-basic
Titolo: findfirstfile su subdirectory

scusate, mi sto ingrippando un attimo con l'Api FindFirstFile.
se io voglio cercare un file in tutte le subdirectory di una directory, come
devo fare?
ad es., io voglio cercare tutti i file con estensione DOC che si trovano in
C:\Mario e in tutte le subdirectory.
l'argomento lpFileName deve essere "C:\Mario\*.doc", o "C:\Mario\\*.doc" o
cos'altro?
grazie.
mario

 wrote in message
news:qz0%5.2617$ag5.1...@twister1.tin.it...

Anche se credo di aver capito il problema, servono: dichiarazione della
funzione e codice che non funziona (con indicazione del del risultato atteso
e di quello, invece, ottenuto).
Ciao
Aldo

MarioH ha scritto nel messaggio ...

Devi farti una bella funzioncina ricorsiva (che la Dir$ di VB non supporta).
Es.
Private Sub Command1_Click()
    Call LoadDir("c:\", False)
End Sub
Private Sub LoadDir(ByVal StartDir As String, ByVal LD_Initiated As Boolean)
    ' sLeftOf$() è una funzioncina che ritorna la parte a sinistra del
carattere
    '    specificato di una stringa.
    Dim d As String
    Dim hFind As Long
    Dim lpFF As WIN32_FIND_DATA
    Dim findRet As Long
    If Right$(StartDir, 1) <> "\" And Right$(StartDir, 1) <> "/" Then
        StartDir = StartDir & "\"
    End If
    hFind = FindFirstFile(StartDir & "*.*", lpFF)
    d = sLeftOf$(lpFF.cFileName, Chr$(0))
    Do While Len(d) > 0
        If Left$(d, 1) <> "." And (lpFF.dwFileAttributes And vbDirectory) <>
0 Then
            Call LoadDir(StartDir & d, True)
        Else
            Debug.Print StartDir & d
        End If
        findRet = FindNextFile(hFind, lpFF)
        If findRet = 0 Then
            d = vbNullString
        Else
            d = sLeftOf(lpFF.cFileName, Chr$(0))
        End If
    Loop
    FindClose (hFind)
End Sub
Ciao


era quello che volevo evitare... ::)))))
su MSDN ho letto che
"To examine any directory other than a root directory, use an appropriate
path to that directory, with no trailing backslash. For example, an argument
of "C:\windows" will return information about the directory "C:\windows",
not about any directory or file in "C:\windows". An attempt to open a search
with a trailing backslash will always fail."
c'entra qualcosa? e che cosa è la trailing backslash?
bye
mario

c'entra qualcosa?
No
e che cosa è la trailing backslash?
è il backslash ("\") in fondo alla dir.
O usi "C:\windows" e ottieni info solo su c:\windows o usi
"C:\windows\<mask>" dove mask è un file o un gruppo di file definiti dai
caratteri jolly.
A quanto pare un "C:\windows\" non va.
Ciao


NOOOOOOOOO!!!!!!!!!!!! madò... la funzioncina sarà lentissima e ci metterà
un OCEANO di tempo... mannaggia... ::)))))))
sigh sigh
mario

 ha scritto

se casualmente capiti su
http://members.xoom.it/vbup
o guardi nei samples del tuo vb, trovi un winseek.vbp in cui ms ha pensato
bene di sostituire le lacrime del programmatore con un dirbox e un listbox,
completi di codice per la ricorsione. fara' schifo ma va.
nb: io non ti ho detto niente. roal, jimi, hellboy, zanna, maurizio e tutti
gli altri davvero bravi che non posso elencare a causa dello spazio tiranno
(chi ca//o l'avra' inventato questo modo di dire, poi?) sanno perfettamente
che io non uso piu' simili mezzucci da programmatorucolo, e che i miei
programmi preferisco ormai farli non funzionare come si deve che funzionare
come non si deve. noblesse oblige. tanto a me mica mi pagano per i
programmi -- ovvero, tanto il cliente di solito non sa neanche cos'ha
davanti al naso, figurati se si accorge che mi perdo per strada una delle
sue subdirs :)

toglimi una curiosità. ma se io uso Dir() in questo modo:
xx=Dir(FirstPath,vbDirectory)
if xx="" then exit sub
do
xx=Dir
if xx="" then exit do
debug.print xx
loop
perche mai non mi escono SOLO le directory, ma tutti i file della cartella
iniziale?
ciao
mario