Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291

    VB6 - Leggere Nome Sub/SubCartella.

    Ho incontrato il seguente problema; dovrei leggere il Nome di una, o più, SubCartella/e contenute a loro volta da una SubCartella, per arrivare ai files contenuti.
    Per intenderci CartellaPrincipale>SubCartella>SubCartella>Files.
    Attualmente uso il seguente codice, che funziona bene nel caso di files contenuti in CartellaPrincipale>SubCartella>Files:
    codice:
    'Istanzia FileSystemObject:
        Set FSO = CreateObject("Scripting.FileSystemObject")
        'Acquisisce il path della Cartella Principale d'Origine:
        Set vrtFx = FSO.GetFolder("D:\Test3\DATI")
        Set vrtSFx = vrtFx.SubFolders
        'Scorre ed acquisisce il Nome delle SubCartelle:
        For Each vrtFx1 In vrtSFx
            strSx = vrtFx1.Name
           'Percorso completo della SubCartella:
            MySubDir = vrtFx & "\" & strSx
                Set vrtFilx = vrtFx1.Files
                'Scorre ed acquisisce il Nome dei Files:
                For Each vrtFx2 In vrtFilx
                    strSx2 = vrtFx2.Name
    .... ....
    Cosa dovrei fare, reiterare il ciclo
    'Scorre ed acquisisce il Nome delle SubCartelle:
    For Each vrtFx1 In vrtSFx
    strSx = vrtFx1.Name
    per arrivare al nome della SubSubCartella o esiste un modo più pratico. Se devo rieseguire il ciclo quale condizione dovrei inserire per eseguire l'ulteriore iterazione per non passare al ciclo Nome dei Files ?
    Per intenderci:
    For Each vrtFx2 In vrtFilx
    strSx2 = vrtFx2.Name


    Spero d'essermi spiegato.
    Cordialità.
    LM

  2. #2
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Penso d'esserci riuscito, spezzando in più blocchi il codice e modificando di conseguenza il percorso della SubCartella.
    Grazie comunque.
    LM

  3. #3
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Ciao LMondi, ho letto che hai risolto, però volevo proporti comunque una soluzione, per risparmiare tempo e codice, e soprattutto per rendere adattabile il codice in qualsiasi situazione...
    si tratta di una semplice funzione ricorsiva:

    codice:
    Dim FSO as New FileSystemObject
    Dim BASEPATH as Folder
    Dim FLD as Folder
    Dim FIL as File
    
    Sub ScanFolders(Path As String)
    
    Set BASEPATH = FSO.GetFolder(Path)
    
    For Each FLD In BASEPATH.SubFolders
        ScanFolders FLD.Path
        For Each FIL In FLD.Path
            Debug.Print FIL.Path
            DoEvents
        Next FIL
        DoEvents
    Next FLD
    End Sub
    con questa routine dovresti ottenere, nella finestra Immediata, tutta la lista dei files contenuti nella cartella che passi come argomento e anche tutti quelli in tutte le sottocartelle presenti.

    Boolean

  4. #4
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Boolean, grazie per l'interessamento.
    Il codice da te suggerito potrebbe essere molto valido,
    ma va in errore in FLD.Path : "For Each può essere reiterato solo in un insieme o in una matrice".
    Cosa devo fare?
    LM

  5. #5
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    hai ragione!!! è stata una svista, scusami...

    era FLD.Files

    ecco il codice corretto:

    codice:
    Dim FSO as New FileSystemObject
    Dim BASEPATH as Folder
    Dim FLD as Folder
    Dim FIL as File
    
    Sub ScanFolders(Path As String)
    
    Set BASEPATH = FSO.GetFolder(Path)
    
    For Each FLD In BASEPATH.SubFolders
        ScanFolders FLD.Path
        For Each FIL In FLD.Files
            Debug.Print FIL.Path
            DoEvents
        Next FIL
        DoEvents
    Next FLD
    End Sub
    Boolean

  6. #6
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Non funziona. Continua a girare sulla prima Cartella ( tra Sub ScanFolders(Path As String) e ScanFolders FLD.Path ) ...
    LM

  7. #7
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    un comportamento così è normale, la routine è ricorsiva perchè richiama se stessa

    e ciclerà richiamando se stessa fintanto che ci saranno sotto cartelle... appena finite analizzerà i files in esse contenuti

    Boolean

  8. #8
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    altra piccola correzione:

    codice:
    Dim FSO as New FileSystemObject
    Dim BASEPATH as Folder
    
    Sub ScanFolders(Path As String)
    
    Dim FLD as Folder
    Dim FIL as File
    
    Set BASEPATH = FSO.GetFolder(Path)
    
    For Each FLD In BASEPATH.SubFolders
        ScanFolders FLD.Path
        For Each FIL In FLD.Files
            Debug.Print FIL.Path
            DoEvents
        Next FIL
        DoEvents
    Next FLD
    End Sub
    le variabili FLD e FIL devono essere dimensionate nella Routine ScanFolders

    Boolean

  9. #9
    Utente di HTML.it L'avatar di LMondi
    Registrato dal
    Sep 2004
    Messaggi
    1,291
    Innazitutto grazie per il tempo che mi stai dedicando.
    Ho spostato le variabili in un modulo Bas, dato che prima mi indicava che lo Stack era esaurito. Ora però mi dà un altro problema in: For Each FIL In FLD.Files "Variabile oggetto o variabile del blocco With non impostata"
    LM

  10. #10
    Utente di HTML.it L'avatar di Boolean
    Registrato dal
    Oct 2005
    Messaggi
    758
    Dim FLD as Folder
    Dim FIL as File

    queste variabili vanno dimensionate *dentro* la routine ScanFolders

    Boolean

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.