IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB 6 et antérieur Discussion :

recherche arborescence plus rapide


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut recherche arborescence plus rapide
    Voilà il y a un certain temps j'avais poster sur la recherche de l'arborescence pour effectuer une tache sur chaque fichier et grace à tous ceux qui m'ont répondu j'ai pu faire le code suivant (merci à eux au passage) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    Private Sub Command1_Click() 
     
    Public fso As FileSystemObject, dossier As Folder, sousdossier As Folder, fichier As File 
     
    Set fso = New FileSystemObject 
    Set dossier = fso.GetFolder("c:\essai") 
    scan dossier 
     
    End Sub 
     
    Public Sub scan(dossier As Folder) 
     
    For Each fichier In dossier.Files 
            MsgBox fichier 
        Next 
     
        For Each sousdossier In dossier.SubFolders 
            MsgBox sousdossier 
            scan sousdossier 
        Next 
     
    End Sub
    Seulement j'ai un problèmes ce système marche parfaitement mais je ne le trouve pas assez rapide ce qui me fait dire ca c'est que c'est une fonction qui s'appelle plusieurs fois.

    alors j'ai finallement trouvé ce morceau de code (qui me semble pas très clair...c'est normal je suis débutant) mais je sais qu'il effectué plusieurs tache autre que recherche l'arborescence. Donc est-ce qu'il serait possible qu'a partir de ce code on me donne le squellette de la recherche d'arborescence comme le code ci dessus, ou que 'lon me le détail de manière précise (voir même si qurlqu'un à déjà fait ca de me montrer une version plus perfomant et simple...j'en demande peut-être beaucoup).

    En attendant la je fais le poirier ...merci à vous

  2. #2
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    j'ai oublié le second code quel neuneu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
    ' Function de recherche de fichiers
    Public Sub findfilesdir(DirPath As String, FileSpec As String)
        Dim filestring As String
        DirPath = Trim$(DirPath)
        If Right$(DirPath, 1) <> "\" Then
            DirPath = DirPath & "\"
        End If
        filestring = Dir$(DirPath & FileSpec, vbArchive Or vbHidden Or vbDirectory)
        Do
            DoEvents
            If filestring = "" Then
                Exit Do
            Else
                If (GetAttr(DirPath & filestring) And vbDirectory) = vbDirectory Then
                    If Left$(filestring, 1) <> "." And Left$(filestring, 2) <> ".." Then
                        lstDirs.AddItem DirPath & filestring & "\"
                    End If
                Else
                    If StrConv(DirPath & filestring, vbLowerCase) Like StrConv(txtfile.Text, vbLowerCase) Then
                        lstFiles.AddItem DirPath & filestring
                        ContentReplace
                    End If
                End If
            End If
            filestring = Dir$
        Loop Until Runnin = False
    End Sub

  3. #3
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Le code que tu viens de donner utiliser la fonction Dir. Il ne permet pas de faire de la recherche récursive (dir ne le supporte pas). Donc ce code se limite à rechercher les fichiers et dossiers dans un répertoire donné. Il ne parcours pas les sous-repertoires de ce répertoire...

    La limitation provient de VB qui n'est pas un langage performant du point de vue exécution. Si tu veux aller plus vite regarde du coté des APIs.

  4. #4
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    N'ayant aucune connaissance des API, est-ce que tu as quelquechose à me proposer?

  5. #5
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    salut, voici ma fonction pour une recherche de fichier

    biensur, il faut l'adapter pour ton projet


    Dans un module:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    Option Compare Database
    Option Explicit
     
    Public AnnulerRech As Boolean
     
    '----------------------------------------
    '------Déclarations propres aux API------
    '----------------------------------------
    '---Les constantes---
    Public Const MAX_PATH = 260
    Public Const INVALID_HANDLE_VALUE = -1
    Public Const FILE_ATTRIBUTE_READONLY = &H1
    Public Const FILE_ATTRIBUTE_HIDDEN = &H2
    Public Const FILE_ATTRIBUTE_SYSTEM = &H4
    Public Const FILE_ATTRIBUTE_DIRECTORY = &H10
    Public Const FILE_ATTRIBUTE_ARCHIVE = &H20
    Public Const FILE_ATTRIBUTE_NORMAL = &H80
    Public Const FILE_ATTRIBUTE_TEMPORARY = &H100
    Public Const FILE_ATTRIBUTE_COMPRESSED = &H800
     
    '---Les API---
    Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" _
             (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
    Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" _
             (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
    Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
     
    '---Les types---
    Public Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
    End Type
     
    Public 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
     
    '----------------------------------------------
    '------Déclarations propres à la fonction------
    '----------------------------------------------
    Public Type ListeFichier
        Fichiers() As WIN32_FIND_DATA
        Chemin() As String * MAX_PATH
        Nombre As Long
    End Type
     
    '--------------------------------------------------------
    '---La fonction Rechercher : ---
    '--- Cette fonction recherche tous les fichiers dans ---
    '--- le répertoire spécifié et ses sous-repertoires ---
    '--- Elle retourne le nombre d'occurences trouvées ---
    '--- Elle commence par rechercher tous les dossier ---
    '--- ensuite elle fait une recherche pour des sous-dossier ---
    '--- si sous-dossier trouvé, alors recommence la recherche de fichier ---
    '--------------------------------------------------------
    Public Function Rechercher(Chemin As String, FichierR As String, _
            ResultatRecherche As ListeFichier) As Long
    '---Déclaration des variables---
    Dim lpFindFileData As WIN32_FIND_DATA
    Dim hFindFile As Long
    Dim lgRep As Long
    Dim CheminRep As String
    '---Recherche tous les fichiers demandés dans le répertoire Chemin---
    hFindFile = FindFirstFile(Chemin & FichierR, lpFindFileData)
    If hFindFile <> INVALID_HANDLE_VALUE Then
    '###############
    'ICI ON RECHERCHE TOUS LES FICHIER QUI PORTE LE NOM DE FichierR
    'IL NE CHERCHE QUE CE FICHIER LA, ALORS IL SAUTE TOUS LES AUTRES
    '###############
        Do
            ' Mémorise
            ResultatRecherche.Nombre = ResultatRecherche.Nombre + 1 'AUGEMENTE LE NOMBRE DE FICHIER TROUVÉ DE 1
            ReDim Preserve ResultatRecherche.Chemin(1 To ResultatRecherche.Nombre) 'REDIMENSIONNE LE TABLEAU AVEC LA NOUVELLE TAILLE
            ReDim Preserve ResultatRecherche.Fichiers(1 To ResultatRecherche.Nombre) 'REDIMENSIONNE LE TABLEAU AVEC LA NOUVELLE TAILLE
            ResultatRecherche.Chemin(ResultatRecherche.Nombre) = Chemin 'MÉMORISE LE CHEMIN DU FICHIER TROUVÉ
            ResultatRecherche.Fichiers(ResultatRecherche.Nombre) = lpFindFileData 'MÉMORISE LE NOM DU FICHIER TROUVÉ
            ' Initialise lpFindFileData (Variable texte uniquement)
            lpFindFileData.cAlternate = String$(14, 0)
            lpFindFileData.cFileName = String$(MAX_PATH, 0)
            DoEvents
        'BOUCLE TANT QU'IL RESTE DES FICHIER OU QUE LA VARIABLE ANNULERRECH = TRUE
        Loop Until FindNextFile(hFindFile, lpFindFileData) = 0 Or AnnulerRech = True
    End If
    FindClose hFindFile 'FERME L'INSTANCE
    '---Recherche dans les sous-répertoires---
    '###############
    'ICI ON CHERCHE TOUT LES FICHIER\DOSSIER QUI CONTIENT UN .
    '###############
    hFindFile = FindFirstFile(Chemin & "*.*", lpFindFileData)
    If (hFindFile <> INVALID_HANDLE_VALUE) Then
        Do
            ' Si c'est un répertoire on continu la recherche
            'LA RECHERCHE DES FICHIERS EST EFFECTUÉ PLUS HAUT, ALORS  CE QU'ON CHERCHE C'EST SEULEMENT LES RÉPERTOIRE     
            If (lpFindFileData.dwFileAttributes And _
                FILE_ATTRIBUTE_DIRECTORY) = FILE_ATTRIBUTE_DIRECTORY Then 'C'EST UN RÉPERTOIRE, ALORS IL FAUT  VÉFIFIER QUE LE RÉPERTOIRE N'EST PAS LE . OU ..
                ' Extraction du nom du répertoire
                CheminRep = Mid$(lpFindFileData.cFileName, 1, _
                            InStr(1, lpFindFileData.cFileName, Chr$(0)) - 1)
                ' Attention dans les sous-répertoire aux
                ' répertoires . et .. (Retour répertoire parent)
     
                'VÉRIFICATION DU RÉPERTOIRE
                If (CheminRep <> ".") And (CheminRep <> "..") Then
                    'LE RÉPERTOIRE N'EST PAS . OU ..
                    CheminRep = Chemin & CheminRep & "\" 'MÉMORISE LE NOM DU RÉPERTOIRE DANS UNE VARIABLE
     
                    SysCmd acSysCmdSetStatus, "Dossier: " & CheminRep
                    Rechercher = Rechercher(CheminRep, FichierR, ResultatRecherche) 'RELANCE LA FONCTION RECHERCHER DANS LE SOUS-RÉPERTOIRE
                End If
            End If
            DoEvents
        'TANT QU'IL Y A DES FICHIER\DOSSIER ET ANNULERRECH = TRUE
        Loop Until FindNextFile(hFindFile, lpFindFileData) = 0 Or AnnulerRech = True
    End If
    FindClose hFindFile 'FERME L'INSTANCE
    SysCmd acSysCmdClearStatus
    '---Retourne le nombre d'occurrences trouvées---
    Rechercher = ResultatRecherche.Nombre 'RETOURNE LE NB D'OCCURENCE
    End Function
    Procédure qui appel la fonction rechercher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    Private Sub BtnLancerRech_Click()
     
     
    If ((Not IsNull(edtPath.Value)) And (edtPath.Value <> "")) Then
        btnFocus.SetFocus
        BtnRech.Visible = False
        BtnLancerRech.Visible = False
        BtnAnnulerRech.Visible = True
     
        Dim ResultatRecherche As ListeFichier
        Dim NombreOccurence As Long
        Dim I As Integer
        Dim r As Variant
     
        '---Recherche de tous les fichiers
        lstPath.RowSource = "Résultat de la recherche;"
        AnnulerRech = False 'variable public pour annuler la recherche (true = annuler)
        SysCmd acSysCmdSetStatus, " "
        Select Case MainOptionBD.Value
            Case 1: NombreOccurence = Rechercher(edtPath.Value, BDGift, ResultatRecherche)
            Case 2: NombreOccurence = Rechercher(edtPath.Value, BDCorporatif, ResultatRecherche)
            Case 3: NombreOccurence = Rechercher(edtPath.Value, BDDeveloppement, ResultatRecherche)
            Case 4: NombreOccurence = Rechercher(edtPath.Value, BDCorporatif_Developement, ResultatRecherche)
            Case 5: NombreOccurence = Rechercher(edtPath.Value, BDGOD, ResultatRecherche)
        End Select
        ' Toutes les informations de la recherche sont dans la variables ResultatRecherche
        For I = 1 To NombreOccurence
            lstPath.RowSource = lstPath.RowSource & Trim$(ResultatRecherche.Chemin(I)) & Trim$(ResultatRecherche.Fichiers(I).cFileName)
            lstPath.RowSource = lstPath.RowSource & ";"
        Next
        BtnRech.Visible = True
        BtnLancerRech.Visible = True
        BtnAnnulerRech.Visible = False
        Else: MsgBox "Veuillez sélectionner un chemin pour la recherche.", vbInformation, "Information"
    End If
    End Sub
    jespère que ce code va t'aider et ne pas trop t'embrouiller
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  6. #6
    Membre habitué Avatar de Crisanar
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    162
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2004
    Messages : 162
    Points : 137
    Points
    137
    Par défaut
    Citation Envoyé par Catbull
    Le code que tu viens de donner utiliser la fonction Dir. Il ne permet pas de faire de la recherche récursive (dir ne le supporte pas). Donc ce code se limite à rechercher les fichiers et dossiers dans un répertoire donné. Il ne parcours pas les sous-repertoires de ce répertoire...

    La limitation provient de VB qui n'est pas un langage performant du point de vue exécution. Si tu veux aller plus vite regarde du coté des APIs.
    En se qui concerne la fonction DIR il ya quand même moyen de ruser.
    On écrit chaque répertoire trouvé dans une liste dynamique.
    On utilise 2 "pointeurs" dans cette liste, un pour le repertoire en cours de scan et l'autre pour savoir la fin de la liste où ajouter les nouveaux répertoire trouvés.
    Une fois que l'on a cherché tous les répertoires du dossier actuel, on descend notre pointeur dans la liste et on scanne les repertoires du repertoire pointé,...

  7. #7
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bah merci beaucoup pour ton code shwin!
    Je l'ai un peut étudié, et c'est vrai qu'il ya beaucoup de chose que je ne comprend pas mais je pense qu'il est possible de le simplifié (ou de l'alléger) de telle manière à ce qu'il ne fasse que ajouter le nom du fichier à ma listbox nommé lstFicThème (par la suite il faudra que je puisse effectué des actions sur les fichiers de cette liste mais une chos après l'autre).

    Ou sinon pourrais m'indiquer les endroits qui son véritablement le coeur de la recherche et ce qui n'est pas essentiel à la recherche (c'est à dire les actions effectuées lorsque le fichier est trouvé...ex: ajouté +1 aux nombre d'occurences).

    Je te remercie énormement du temps passé!!!


    ps : a quoi sert le bouton focus et quelle est la différence entre le bouton rech et lancerrech?

  8. #8
    Membre éclairé
    Avatar de Catbull
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    542
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 542
    Points : 854
    Points
    854
    Par défaut
    Le principe de l'algorithme de Shwin est le même que celui utilisant FileSystemObjet. Il utilise la récursivité lorsque l'élément lu est un répertoire... Ce qu change c'est la méthode d'accès aux fichiers/Repertoires.

  9. #9
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    ok ca confirme ce que j'avais a peu près compris (Avec le rep . et le rep père..) Mais j'aurais quand même besoin d'une plus grande description des liste de commande (style algo) ou sinon un alégement et je me débrouillerais avec.

    (Même si j'ai l'habitude de remercie toute personne m'aidant j'insiste ici car c'est un noeud important de mon programme et aussi pour mon apprentissage... donc un grand merci pour le temps passé pour toute personne m'aidant)

  10. #10
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    voila, j'ai commenté le code encore plus. Regarde plus haut pour voir les modification dans le code (commentaires)
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  11. #11
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Ok thx, juste une dernière question pourquoi:
    Option Compare Database
    Apparrait en rouge comme une erreur (d'ailleur quand on le lance il y a erreur).

  12. #12
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    C'est parce que le code de l'ami shwin vient d'access. Enlève cette ligne, tu n'en as pas besoin. Par contre si tu pouvais faire de test de rapidité, je me demande si tu es réellement gagnant. En tout cas, est ce qu'il faut s'embéter d'un code complexe difficile à maintenir vu que ce n'est pas toi qui l'a fait ou préferer un soupson de perte de performance ?

    Merci de la réponse

  13. #13
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    bien vu tof, mais il faut mieux apprendre comment fonctionne un code performant que de prendre un code moins compliquer et moins performant.



    en mode debug, le code est facile à suivre malgré sa récursivité
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  14. #14
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Ouais shwin, c'est vrai, pour le fait d'apprendre un code, le hic, c'est qu'il ne marche pas chez moi. C'est du vba Access et en vb6, il boque sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SysCmd acSysCmdClearStatus
    Et est ce que le filesystemobject est si peu performant que ça ? Parce que e-steel a dit :

    Seulement j'ai un problèmes ce système marche parfaitement mais je ne le trouve pas assez rapide ce qui me fait dire ca c'est que c'est une fonction qui s'appelle plusieurs fois.
    Or toi aussi tu utilses la recursivité

  15. #15
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    enleve le SysCmd acSysCmdClearStatus

    c seulement pour afficher les fichier rechercher dans la barre de status access
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  16. #16
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    Merci shwin. C'est vrai qu'il est quand même beaucoup plus performant ton code. Environ 3 fois plus rapide. Moins d'une seconde avec le tiens et moins de 3 secondes avec le FSO.

    On aura encore appris quelque chose aujourd'hui. Merci Shwin

  17. #17
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Y a t-il d'autres commandes appartenant a acess.
    Par exemple les tableaux sont-ils des controles de acess ou autres chose (vu que je ne vois pas leur déclarations...remarque je louche peut-être )

  18. #18
    Futur Membre du Club

    Inscrit en
    Octobre 2004
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 8
    Points : 9
    Points
    9
    Par défaut
    Bon je pense que c'est presque bon, il me reste encore un soucie je n'arrive pas à récuperer le chemin entièrement

    voici le code lorsque je clique sur le bouton (le module est assez proche de celui de shwin)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Private Sub imgRecherche_Click()
     
        Dim NbOccurence As Long
        Dim RepDoc As String
        Dim Masque As String
        Dim ResultatRecherche As ListeFichier
        Dim i As Long
        Dim Texte As String
        Dim Mot As String
        Dim CheminFic As String
     
        'On met en attente le curseur
        Screen.MousePointer = vbHourglass
     
        'Initialise le mot à chercher
        Mot = txtMotRechercher.Text
     
        '---on paramètre le répertoire à vérifier
        RepDoc = "c:\essai\"
        '---on test de bien avoir un "\" a la fin du chemin
        If Right(RepDoc, 1) <> "\" Then
            RepDoc = RepDoc & "\"
        End If
        '---le masque sert à filtrer les fichiers à rechercher
        '---exemple "*.doc" , "*.exe" ...
        Masque = "*.*"
     
        '---on récupère le nombre de fichiers trouvés
        NbOccurence = Rechercher(RepDoc, Masque, ResultatRecherche)
     
        '---on parcours tous les résultats trouvés
        '---et on affiche le nom du fichier dans la listbox
        lstFicThème.Clear
        For i = 1 To NbOccurence
            CheminFic = ResultatRecherche.Chemin(i) & "\" & ResultatRecherche.Fichiers(i).cFileName
            MsgBox CheminFic
            Texte = Space(FileLen(CheminFic))
            Open ResultatRecherche.Fichiers(i).cFileName For Binary As #1
            Get #1, , Texte
            Close #1
            If chkCasse.Value = 0 Then
                Texte = StrConv(Texte, vbUpperCase)
                Mot = StrConv(Mot, vbUpperCase)
            End If
            If InStr(Texte, Mot) <> 0 Then
                lstFicThème.AddItem (ResultatRecherche.Fichiers(i).cFileName)
            End If
        Next
     
    MsgBox "Recherche terminé"
    Screen.MousePointer = 0
    End Sub
    Donc mes questions posent sur la ligne
    CheminFic = ResultatRecherche.Chemin(i) & "\" & ResultatRecherche.Fichiers(i).cFileName

    pourquoi il faut écrire ResultatRecherche.Fichiers(i).cFileName alors que dans le tableau ResultatRecherche.Fichiers(i) on a écrit le chemin du fichier.
    Et autres questions pour avoir le chemin d'accès il faut mettre quoi après
    ResultatRecherche.Chemin(i) (car cela renvoit "Faux").

  19. #19
    Membre éclairé
    Avatar de shwin
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    568
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2003
    Messages : 568
    Points : 777
    Points
    777
    Par défaut
    la réponse est ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    Public Type FILETIME
        dwLowDateTime As Long
        dwHighDateTime As Long
    End Type 
     
    Public 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
     
     
    Public Type ListeFichier
        Fichiers() As WIN32_FIND_DATA
        Chemin() As String * MAX_PATH
        Nombre As Long
    End Type
     
     
    Public Function Rechercher(Chemin As String, FichierR As String, _
            ResultatRecherche As ListeFichier) As Long
    resultatRecherche est du type ListeFichier, sauf que le membre Fichier de ListeFichier est un tableau qui pointe sur la structure WIN32_FIND_DATA.

    donc, il faut faire ResultatRecherche.fichier(laposition).le_membre_de_la_structure.

    dans ce cas, cFilename contient le nom du fichier.

    j'aurais pu aller chercher le membre ftCreationTime de cette facon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ResultatRecherche.fichiers(position).ftCreationTime.dwLowDateTime
    jespere que tu va comprendre
    Remoting Context Matters
    Everything in this chapter is 100 percent undocumented. Reliance on these techniques is not supported by either Microsoft, the publisher, or the author of this book. Use at you own risk! If your computer won't work afterwards, your toaster blows up or your car doesn't start, I assume no liability whatsoever: You're now about to enter the uncharted territories of .NET and you do so on your own risk. I can only provide some guidance

  20. #20
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour cette source utilisant les API

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 05/07/2010, 10h37
  2. [path finding] Recherche d'un chemin "plus rapide"
    Par ReiVon dans le forum Intelligence artificielle
    Réponses: 9
    Dernier message: 29/11/2008, 10h31
  3. la Recherche la Plus Rapide dans un tableau
    Par linuxeur dans le forum C
    Réponses: 10
    Dernier message: 23/05/2008, 00h07
  4. [Vba,RecordSet,SQL]Moteur de recherche plus rapide?!
    Par omegabahamut dans le forum Access
    Réponses: 2
    Dernier message: 25/02/2007, 21h18
  5. [MySQL] Un moteur de recherche... plus rapide
    Par groupejtt dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/03/2006, 21h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo