- Que permet cette fonction ?
- 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