Liste de fichiers sur un disque en vb6

Soyez le premier à donner votre avis sur cette source.

Vue 9 012 fois - Téléchargée 716 fois

Description

Ce programme permet de lister une arborescence de répertoires et de fichiers.
Le résultat est mis dans un fichier texte de votre choix.

Un fichier "\fichiersOuRepertoiresNonLus.txt" liste les erreurs d'accès
(droits d'accès ou fichier ouvert par autre appli ou erreur disque à cet endroit)
Il est dans le répertoire où est installé le programme.

La fonction de listage et les fonctions de tri utilisent pas mal d'accès disque.. il est donc préférable d

'installer le programme sur un disque dur et non sur une clé USB (ca peut être 10 fois plus long)

Le programme de tri peut être utilisé à d' autres fins Sa vitesse est en "NLog(N)" et dépend de la vitesse du

disque dur ou du média utilisé. Il peut nécessiter jusque à 4 fois le volume mémoire du fichier à trier.
En gros, on trie des ensembles déja ordonnés. Au début par 2, puis par 4 puis par ..2^n>= nb de lignes à
trier.J'appelle cela un 'tri Binaire .." Mais assez efficace.

C'est juste pour le fun et plaisir de programmer en VB car même le vieux MSDOS est efficace sur le sujet.

dir c:\rep_toto /s/w/ah/ar/aa/b >d:\tmplst.txt par exemple! Mais ça ne dit pas comment c'est fait!

Source / Exemple :


Public Sub FileSearch(xPath, XFile, xFichierSortie, xTypesDeFichiersRecherches As Byte)
    Dim ww As String
    Dim xx, yy, zz, FichierErreurs As Integer
    Dim NbErreurs As Long
    Dim w, wx As String
    Dim Test As Boolean
    Dim Entree1, Entree2 As String
    
    Entree1 = App.Path & "\tmp1.txt"
    Entree2 = App.Path & "\tmp2.txt"
    
    FichierErreurs = FreeFile:  Open App.Path & "\fichiersOuRepertoiresNonLus.txt" For Output As 

FichierErreurs
    
    zz = FreeFile: Open xFichierSortie For Output As zz
    Test = False
    xx = FreeFile
    Open Entree1 For Output As xx
        w = ""
        On Error GoTo TERR
        w = Dir(xPath & "*.*", xTypesDeFichiersRecherches)
        On Error GoTo 0
        While w <> ""
            If w <> ".." And w <> "." Then
                w = xPath & w
                If IsFile(w) Then
                    Print #zz, w
                Else
                    Print #xx, w
                    Test = True
                End If
            End If
            w = Dir
        Wend
    Close xx
    
    While Test
        xx = FreeFile: Open Entree1 For Input As xx
        yy = FreeFile: Open Entree2 For Output As yy
        Test = False
        While Not EOF(xx)
            Line Input #xx, w
            Print #zz, w & "\"
            ww = ""
            On Error GoTo TERR
            ww = Trim(Dir(w & "\*.*", xTypesDeFichiersRecherches))
            On Error GoTo 0
            While ww <> ""
                If ww <> ".." And ww <> "." Then
                    ww = w & "\" & ww
                    If IsFile(ww) Then
                        Print #zz, ww
                        LblInfo = w
                        DoEvents
                    Else
                        Print #yy, ww
                        Test = True
                    End If
                End If
                ww = Trim(Dir)
            Wend
        Wend
        wz = Entree1: Entree1 = Entree2: Entree2 = wz
        Close xx
        Close yy
    Wend
    Close zz
    If ExistFile(Entree1) Then Kill Entree1
    If ExistFile(Entree2) Then Kill Entree2
    Me.SetFocus
    ww = " Liste disponible dans : " & RésultatTxt.Text
    ww = ww & vbCrLf
    ww = ww & vbCrLf & "  Fichiers ou répertoires inaccessibles = " & NbErreurs
    ww = ww & vbCrLf & "  Voir le fichier " & App.Path & "\fichiersOuRepertoiresNonLus.txt"
    ww = ww & vbCrLf
    LblInfo.Caption = ww
    Close #FichierErreurs
    Exit Sub
TERR:
    Print #FichierErreurs, Err.Number, "| " & w & " |"
    NbErreurs = NbErreurs + 1
    Resume Next
End Sub

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
59 -
Salut
Ce qui m'étonne, c'est que la liste des fichiers ne soient pas déjà dans l'ordre alphabétique lors de l'acquisition - pas fait l'essai.

Conseil pour la clarté du code :
Dir(w & "\*.*", 22) ---> Dir(w & "\*.*", vbDirectory Or vbSystem Or vbHidden)
(bizarre comme choix)
Chr$(13) & Chr$(10) ---> vbCrLf

+ Close #1 ---> A revoir : aucun fichier n'a été ouvert avec ce numéro.
Coup de bol si xx, yy ou zz correspondent = futur bug
Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
54 -
me semble pas que Dir trie quoi que ce soit, effectivement...

ben si:
Open App.Path & "\fichiersOuRepertoiresNonLus.txt" For Output As #1

justement, je trouve pas forcément top ce canal en dur... alors qu'après tu passes par FreeFile...
tu dépose une fonction, donc exportable, réutilisable... d'autres programme qui integreront ta fonction auront peut etre déjà un #1 ouvert, et là.... boum!

plutot que de passer (jongler, dans le cas présent)par des fichiers temporaires.
Jack ici présent et moi même avons fais des "Dir récursif" qui aident à ce niveau...

http://www.vbfrance.com/code.aspx?ID=37859
et
http://www.vbfrance.com/code.aspx?ID=43640
cs_CFCTABLE
Messages postés
18
Date d'inscription
samedi 1 mars 2003
Statut
Membre
Dernière intervention
14 avril 2008
-
A l'origine ce programme était écrit en QuickBasic et la mémoire vive était chère c'est pour cela que je n'avais pas utilisé de fonctions trop élaborées.
Les fonctions de tri sont dans le module HTSortMod.C'est pareil, les cannaux d'ouverture de fichier étaient en dur et je les ai laissés tels quels.
Pour Dir(w & "\*.*", 22) ---> Dir(w & "\*.*", vbDirectory Or vbSystem Or vbHidden), j'ai mis 22 en dur pour ne pas effectuer le calcul à chaque passage! mais effectivement JACK, ton idée est bonne , je vais mettre cette valeur dans une variable ce qui permettra de paramétrer la recherche.
Quand au choix des valeurs a été fait pour avoir tous les fichiers.
Pour le open #1 je l'ai juste rajouté vite fait pour fournir une liste de fichiers non traités!. Comme j'ai un peu de temps, je modifie le code et refait un Post.
Voila c'est fait.
Merci pour vos commentaires.
Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
22 août 2018
54 -
"j'ai mis 22 en dur pour ne pas effectuer le calcul à chaque passage"
calculé une fois, a la compilation...
cs_PaTaTe
Messages postés
1878
Date d'inscription
mercredi 21 août 2002
Statut
Contributeur
Dernière intervention
7 janvier 2019
-
Pour ma part je trouve que ce code manque de clarté. Essais de mettre des noms de variables cohérentes avec ce qu'elle sont supposées contenir. Evites les variables sans type :

Public Sub FileSearch(xPath, XFile, xFichierSortie, xTypesDeFichiersRecherches As Byte)

3 dans la première ligne déjà

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.