[FUNC] _FTP_DirCopy()

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_DirCopy()

#1

Message par PandiPanda »

Que permet cette fonction?
Cette fonction permet de copier dans un serveur ftp vos fichier/dossier d'un dossier donné. Cela permet de garder la meme arborescence que vous avez sur votre ordinateur.

Code : Tout sélectionner

#cs _FTP_DirCopy($l_FTPSession, $pathDirToCopy,$s_Remote="/",$sInclude_List = "*",$recurs=False)
    @Param:
        ~ $l_FTPSession => $Conn = _FTP_Connect($Open, $server, $username, $pass)
        ~ $pathDirToCopy => le dossier a copier
        ~ $s_Remote => dans quel dossier copier nos fichier/dossier dans le ftp
        ~ $sInclude_List => accepte seulement des fichier d'un type specifique ?
        ~ $recurs => recherche recursive ou non?
    @Error & @Extend:
        ~ @Error = 0 => pas d'erreur.
        ~ @Error = 1 => erreur de parametre
        ~ @Error = 2 => fichier et/ou dossier mal copié

        ~ @Extend = 0 => pas eu d'erreur pour le ftp (voir si @error = 0)
        ~ @Extend = 1  => pas de dossier trouvé
        ~ @Extend = 2  => pas de fichier trouvé
        ~ @Extend = 4 = => dossier mal copier
        ~ @Extend = 8 => fichier mal copié
    @Return:
        Si erreur => @error=2 alors return un tableau dont $array[0] = le nombre d'element (donc d'erreur)
        Si pas d'erreur => @error=0 alors return "" [RIEN]
#ce
► Afficher le texte
Pour utiliser cette fonction, vous aurez besoin de divers UDF, notamment;

- #Include <FTPEx.au3>
- #include "RecFileListToArray.au3"

Exemple:
► Afficher le texte
Modifié en dernier par PandiPanda le jeu. 01 déc. 2011 10:54, modifié 3 fois.
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
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_DirCopy()

#2

Message par Tlem »

Bonsoir PandiPanda.
J'ai survolé votre 'fonction' et je voulais vous faire part de certaines choses qui me dérange.
Je n'ai pas fait le tour complet du code, mais au moins, voici quelques remarques :

1 - Votre manière de tester les paramètres :

Code : Tout sélectionner

    If $pathDirToCopy="" Or Not IsBool($recurs) Or IsInt($s_Remote) Or IsInt($pathDirToCopy) Then
        SetError(1)
Déjà, le test du dossier ! Plutôt que de tester si la chaine est vide, testez plutôt si le dossier existe et si c'est bien un dossier. Et les deux derniers tests me laisse pantois ! :shock: Et pour finir (cette partie), vous fixez @error mais vous ne sortez pas de la fonction ... :shock: :shock:

2 - La gestion des fins de chaine pour $s_Remote et $pathDirToCopy pourait être optimisée, car si par erreur vous avez ceci "\\" ou ceci "//" vous aurez quelques problèmes. :roll:
Je vous conseil ceci :

Code : Tout sélectionner

$pathDirToCopy = StringRegExpReplace($pathDirToCopy, "[\\/]+\z", "")
$s_Remote = StringRegExpReplace($s_Remote, "[\\/]+\z", "")

3 - Ensuite vous utilisez des variables inutilement :

Code : Tout sélectionner

Local $iReturn=2,$iRecur=0,$iSort=0,$iReturnPath=1
If $recurs Then $iRecur=1
Local $_PathArrayFolder=_RecFileListToArray($pathDirToCopy, "*",$iReturn, $iRecur, $iSort, $iReturnPath)
Pourquoi tant de code alors que ceci suffit :

Code : Tout sélectionner

Local $_PathArrayFolder=_RecFileListToArray($pathDirToCopy, "*",2, $recurs, 0, 1)
Idem pour le second _RecFileListToArray. :mrgreen:

4 - Pas de gestion d'erreur si aucun fichier !

5 - Pas de gestion d'erreur sur la copie FTP !

6 - Votre fonction _ReplaceBackSlash() ne présente strictement aucun intérêt puisque dans les deux cas d'appel à cette fonction, la variable ne peut être vide :

Code : Tout sélectionner

_ReplaceBackSlash($s_Remote&"/"&$_PathArrayxxxxx[$i])
Il y aura au moins le "/" central, donc le test

Code : Tout sélectionner

If  $tmp <> "" Then Return $tmp
est inutile ... :mrgreen:
Ce qui permet de simplifier votre code par :

Code : Tout sélectionner

_FTP_DirCreate($l_FTPSession,StringReplace($s_Remote&"/"&$_PathArrayFolder[$i]),"\","/")
Idem pour $_PathArrayFile.

7 - Pensez au code de retour de la fonction, sinon comment savoir si ça s'est bien déroulé (SetExtended ne suffit pas, il faut gérer @error aussi). :roll:

Bon, voilà pour un premier jet, mais je suis presque sur qu'on peut encore trouver des 'erreurs' ou des améliorations.
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_DirCopy()

#3

Message par PandiPanda »

Merci beaucoup, je vais potasser et lire tout ca ^^

Edit:
Edit du code après avoir lu les différentes critique citée plus haut ^^

Meilleur gestion des erreurs, retour d'un tableau d'erreur (c'est à dire le path de(s) fichier(s) et/ou dossier(s)), si erreur y'a eu.

Je suis ouvert à toute autre amélioration, critique ...
ce qui nous tue pas, nous rend plus fort n'est ce pas ? :mrgreen:
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
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_DirCopy()

#4

Message par Tlem »

Un peut d'air que diable :
► Afficher le texte

Code : Tout sélectionner

If $recurs Then $iRecur=1
me parait totalement inutile car True = 1 et False = 0 !

Pour finir, toujours pas de gestion de @Extented en cas d'erreur de copie de fichier(s) ou dossier(s) !!!

Sinon, le reste à l'air correct, mais je n'ai pas testé. Je suis juste surpris que l'on puisse copier des fichiers dans un sous répertoire de FTP sans avoir besoin de ce déplacer dedans ! :mrgreen:
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_DirCopy()

#5

Message par PandiPanda »

hanlalala décidemment, je comptais passer par un bitAnd($iRecurs,1) pour savoir si c'etais 1 ou 0, mais finalement c'est inutile :oops:

Merci !! :D

Edit: après test il semblerai que votre fonction _RecFileListToArray() ne prenne pas en compte que le $iRecus=true soit 1, il faut bel et bien passer par un BitAnd($iRecurs,1) pour que ca soit mit à 1 ou 0 :mrgreen:

Edit2: petite mise a jour du code.
La seule moralité qui tienne dans un monde cruel est la chance. Impartiale. Équitable. Vraie
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_DirCopy()

#6

Message par Tlem »

_RecFileListToArray() n'est pas ma fonction, mais celle de Melba23. D'ailleurs pour information, je préfère _FileListToArrayEx() de DXRW4E qui est bien plus simple et aussi efficace. ;)

Pour le code, j'ai pas regardé de prêt, mais ça semble pas mal.
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é".
Répondre