[Func] _FTP_ListRec()

Partagez des fonctions et des UDF AutoIt.
Règles du forum
.
Répondre
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

[Func] _FTP_ListRec()

#1

Message par PandiPanda »

  • Que permet cette fonction ?
Son utilité principale étant la possibilité de parcourir de manière récursive des dossiers, d'en récupérer l'arborescence de fichier(s) et/ou dossier(s) voulu d'un serveur FTP.
  • Paramètre, valeur de retour

Code : Tout sélectionner

#cs _FTP_ListRec($server,$user,$mdp,$firstDirToSearch,$regexDir = ".*",$regexFile = ".*")
    @Param:
        # $server :  le serveur FTP
        # $user : l'identifiant
        # $mdp : le mot de passe
        # $flag : Si 0 = fichier+dossier, 1 = fichier , 2 = dossier
        # $firstDirToSearch : le premier dossier où commencer la recherche
        # $regexDir : dossier d'inclusion (regex Mode)
        # $regexFile fichier d'inclusion (regex Mode)
    @Return & @Error = 0:
        # array[$n]  : contenu depend du flag
    @Error = 1, @extend = ?:
        # 1 : erreur d'ouverture au FTP
        # 2 : erreur de conexion au FTP
#ce
  • La fonction :

Code : Tout sélectionner

Func _FTP_ListRec($server,$user,$mdp,$flag = 0,$firstDirToSearch="/",$regexDir = ".*",$regexFile = ".*")
    Local $Open = _FTP_Open('My Panda FTP')
    If @error Then Return SetError(1,1,"")
    Local $Conn = _FTP_Connect($Open, $server, $user, $mdp)
    If @error Then Return SetError(1,2,"")
    Return Private_ListRec($Conn,$firstDirToSearch,$regexDir,$regexFile,$flag)
    _FTP_Close($Open)
EndFunc

#region interne
    Func Private_ListRec($Conn_FTP,$dirToSearch,$regexDir,$regexFile,$flag)
        Local $all_Dir= "",$dirRes = "",$fileRes = ""
        Private_List_All_Dir($Conn_FTP,$dirToSearch,$all_Dir)
        If $all_Dir <> "" Then
            $all_Dir = StringSplit(StringTrimRight($all_Dir,1),"|")
            If IsArray($all_Dir) Then
                For $i = 0 To UBound($all_Dir)-1
                    If StringRegExp($all_Dir[$i],$regexDir) Then
                        $dirRes&=$all_Dir[$i]&"|"
                        Local $tmp = Private_FTP_List($Conn_FTP,$all_Dir[$i],2)
                        If Not @error And IsArray($tmp) Then
                            For $j = 1 To $tmp[0]
                                If StringRegExp($tmp[$j],$regexFile) Then $fileRes&=$all_Dir[$i]&"/"&$tmp[$j]&"|"
                            Next
                        EndIf
                    EndIf
                Next
                If $flag = 0 Or $flag = 1 Then
                    Local $tmp = _Ftp_ListToArray($Conn_FTP,$dirToSearch,2,0x80000000)
                    If Not @error And IsArray($tmp) Then
                        For $i = 1 To $tmp[0]
                            $fileRes = StringReplace($dirToSearch&"/"&$tmp[$i], "//", "/")&"|"&$fileRes
                        Next
                    EndIf
                EndIf
                If $flag = 0 Then Return StringSplit(StringTrimRight($dirRes&$fileRes,1),"|",3)
                If $flag = 1 Then Return StringSplit(StringTrimRight($fileRes,1),"|",3)
                If $flag = 2 Then Return StringSplit(StringTrimRight($dirRes,1),"|",3)
            EndIf
        EndIf
        Return SetError(1,1,"")
    EndFunc

    Func Private_List_All_Dir($l_FTPSession,$s_Remote,ByRef $myArrayDir)
        If $s_Remote="" Or $s_Remote=-1 Or $s_Remote=Default Then $s_Remote="/"
        If $s_Remote <> "/" Then $s_Remote=StringRegExpReplace($s_Remote, "[\\/]+\z", "")
        Local $nbDossier=Private_FTP_List($l_FTPSession,$s_Remote,1)
        If Not @error And IsArray($nbDossier) Then
            For $i=1 To $nbDossier[0]
                If $s_remote="/" Then
                    $nbDossier[$i]="/"&$nbDossier[$i]
                Else
                    $nbDossier[$i]=$s_remote&"/"&$nbDossier[$i]
                EndIf
                $myArrayDir&=$nbDossier[$i]&"|"
                Private_List_All_Dir($l_FTPSession,$nbDossier[$i],$myArrayDir)
            Next
        EndIf
    EndFunc

    Func Private_FTP_List($l_FTPSession,$s_Remote="/",$Return_Type = 2)
        If $s_Remote <> "/" Then $s_Remote=StringRegExpReplace($s_Remote, "[\\/]+\z", "")
        _FTP_DirSetCurrent($l_FTPSession,$s_Remote)
        If ( (Not @error)  And ($Return_Type = 1 Or $Return_Type=2)) Then
            Local $aRet=_Ftp_ListToArray($l_FTPSession,$Return_Type,0x80000000)
            If IsArray($aRet) And $aRet[0]=0 Then
                Return SetError(2,1,"")
            EndIf
            Return $aRet
        Else
            Return SetError(1,1,"")
        EndIf
    EndFunc
#endregion interne
 
Edit: Modification de la fonction de base après différent bug. Nouvelle implémentation, règle les bugs de l'ancienne fonction.
Modifié en dernier par PandiPanda le ven. 28 sept. 2012 22:27, modifié 3 fois.
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Avatar du membre
silvere
Niveau 8
Niveau 8
Messages : 532
Enregistré le : sam. 24 sept. 2011 22:56
Status : Hors ligne

Re: [Func] _FTP_ListRec()

#2

Message par silvere »

J'avais essayer de la créé ... mais j'avais échoué merci :lol:
Quand le mensonge prend l'ascenseur, la vérité prend l'escalier. Elle met plus de temps, mais elle fini toujours par arriver.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Func] _FTP_ListRec()

#3

Message par Tlem »

[mode troll on]
PandiPanda le 11/12/2011 a écrit :(je suis en train de coder une petite fonction qui permet la recherche recursive dans un FTP, si vous etes patient ... ^.^)
L'enfant de ce message vient de naitre ^^
[mode troll off]

Perso, j'avais trouvé ceci : http://www.autoitscript.com/forum/topic ... ntry799714 qui une fois adapté donnait ce genre de chose :
► Afficher le texte
Éventuellement à adapter. ;)

Edit : Ajout du retour de la date et de la taille. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
PandiPanda
Membre émérite
Membre émérite
Messages : 656
Enregistré le : mar. 19 juil. 2011 14:03
Localisation : Bruxelles
Status : Hors ligne

Re: [Func] _FTP_ListRec()

#4

Message par PandiPanda »

Oulalalala j'avais complètement oublié que j'avais écrit ça :oops:
j’espère qu'il a pas trop espérer/attendu ... '^^

Je vais lire le lien que vous avez fournit et voir lequel est le "mieux" ^^
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
Répondre