Newsgroup: it.comp.lang.visual-basic
Titolo: Funzione dir Vb6

Ciao, uso visual basic 6,
vorrei metter su una funzione o usare qualcosa di esistente che mi
trovi dei file a partire da una directory in tutte le sottodirectory.
Vorrei specificare però delle wildcards sia nel nome del file che nel
percorso delle directory..
Ad esempio:
Dir("C:\mydir\m*\*.TXT", vbNormal)
vorrebbe essere "cerca tutti i file .TXT nelle directory che iniziano
con m e sono sotto C:\mydir".
Va in errore perchè non è in grado di trovare il percorso.
Cosa potrei usare?
Grazie

 Cosa potrei usare?
Non saprei, ma brutalmente puoi prenderti tutte le directory che cominciano
per m* con vbDirectory e metterle in un array/collection.
Poi fai la dir per ognuna di esse con *.txt.
Non so se farebbe di suo quello che chiedi...

 Poi fai la dir per ognuna di esse con *.txt.
Si..In realtà è proprio quello che per adesso faccio.:)
Mi è venuta questa domanda perchè avendo due o tre livelli di
sottodirectory diventa macchinoso e un po' scomodo.
E poi per un paragone con il comando 'ls' della shell del linux: 'ls -
l /mydir/m*/*/*.TXT' , lì è normale avere un comado così.
Gabri


in Windows però non mi pare esiste un comando di sistema
corrispondente, e quindi anche in VB non trovi niente di già pronto.
Peò il fatto di avere uno, tre o dieci livelli non dovrebbe aumentare
la "scomodità", casomai solo leggermente il tempo di esecuzione; se
hai già codice che lo fa per un livello, dovrebbe essere sufficente
adattare la tua routine per fare in modo che possa essere chiamata
ricorsivamente, e sei a posto.

 Poi fai la dir per ognuna di esse con *.txt.
Si..In realtà è proprio quello che per adesso faccio.:)
Mi è venuta questa domanda perchè avendo due o tre livelli di
sottodirectory diventa macchinoso e un po' scomodo.
E poi per un paragone con il comando 'ls' della shell del linux: 'ls -
l /mydir/m*/*/*.TXT' , lì è normale avere un comado così.
anche in dos/windows, direi dall'inizio, c'e' dir /s.
c:\>dir mydir/*.txt /s
ma da codice devi gestire tu la ricorsione.


Prova questa, in XDir avrai l'elenco dei files... (si può ottimizzare
in velocità, vedi le comparazione stringhe si può cambiare con StrComp
che è più veloce)
Private Sub FilesSearch(DrivePath As String, Ext As String)
    Dim XDir() As String
    Dim TmpDir As String
    Dim FFound As String
    Dim DirCount As Integer
    Dim x As Integer
    DirCount = 0
    ReDim XDir(0) As String
    XDir(DirCount) = ""
    If Right(DrivePath, 1) <> "\" Then
        DrivePath = DrivePath & "\"
    End If
    TmpDir = Dir$(DrivePath, vbDirectory)
    Do While Len(TmpDir) > 0
        If TmpDir <> "." And TmpDir <> ".." Then
            If (GetAttr(DrivePath & TmpDir) And vbDirectory) =
vbDirectory Then
                XDir(DirCount) = DrivePath & TmpDir & "\"
                DirCount = DirCount + 1
                ReDim Preserve XDir(DirCount) As String
            End If
        End If
        TmpDir = Dir$
    Loop
    FFound = Dir$(DrivePath & Ext)
    Do Until Len(FFound)=0
        lstFiles.Add FFound, DrivePath
        FFound = Dir$
    Loop
    For x = 0 To (UBound(XDir) - 1)
        FilesSearch XDir(x), Ext
    Next x
End Sub
-------------------------------
www.prioregroup.com

ma da codice devi gestire tu la ricorsione.
 cmd = "%somspec% /c dir c:*.txt /s/b  >lista.txt"  
Se fai la shell di questo ottieni un file con i pathname dei txt del disco.
Se non hai problemi con il prompt dei comandi bloccato puoi far fare tutto a lui e leggere
il file del risultato.
-- 
Giovanni Cenati (Bergamo, Italy)
Write to "Reventlov" at katamail com
http://digilander.libero.it/Cenati
 (Esempi e programmi in VbScript)
-- 

dir c:\windows\*.txt
in sostanza: in dos, se volevo da root in giù, per sicurezza facevo sempre e 
comunque
dir c:\*.txt /s
riprovato ora in console:
C:\Windows\System32>j:
j:\>cd \modelli
j:\modelli\>dir *.dot /s
...
j:\modelli\>c:
C:\Windows\System32>dir j:*.dot /s
dà solo quelli di j:\modelli.
ciao