Page 1 sur 1
[R] problème avec FileListToArrayXT
Posté : lun. 22 mars 2010 17:45
par bilbo
Bonjour
J'ai un problème avec un script.
Il est conçu pour copier des fichiers ayant 90 jours se trouvant dans plusieurs répertoires.
J'arrive à copier les fichiers ayant 90 jours,
j'arrive à copier tout les fichiers de plusieurs répertoires,
mais je n'arrive pas à lier les 2
je n'arrive pas à faire une boucle avec FileListToArrayXT qui contienne des filtres inhérents à la date des fichiers.
Merci d'avance de vos lumières.
► Afficher le texte
Code : Tout sélectionner
#include <Date.au3>
#include <Array.au3>
#include <FileListToArrayXT.au3>
#include <File.au3>
; Répertoire fichiers
$rep_ori="C:\test1\" ; Avec \ final
$rep_dest="C:\test2\" ; Avec \ final
$extention="*.ini"
$iRetItemType = 0
$iRetPathType = 1
$bRecursive = true
$sExclude = ""
$iRetFormat = 1
$sFile="c:\test2\fichiers.txt"
; Delta jours
$delta= -90
; définition de la date des fichiers à archiver
$arch = _DateAdd( 'd',$delta, _NowCalcDate())
;Recherches des fichies avec les extentions "*.ini"
$search=_FileListToArrayXT($rep_ori, $extention, $iRetItemType, $iRetPathType, $bRecursive, $sExclude, $iRetFormat)
;Creation de la liste de fichier rechercher.
_FileWriteFromArray($sFile, $search, 1)
; Recherche des fichiers dans le répertoire d'origine (! les répertoires sont listés aussi)
$search = FileFindFirstFile($rep_ori & $extention)
; Msg si répertoire de destination inexistant ou vide
If $search = -1 Then
MsgBox(0, $script_titre, "Le répertoire " & $rep_ori & " n'existe pas ou est vide",15)
Exit
EndIf
; Compteur fichiers
$compteur=0
;test de la liste de fichier recherche.
Dim $aFind
If Not _FileReadToArray("c:\test2\fichiers.txt",$aFind) Then ;test de la liste de fichier recherche.
MsgBox(4096,"Error", " Pas de fichier fichiers.txt dans le disque.")
Exit
EndIf
; déclaration du fichier contenant la liste des fichiers copiés
$file = FileOpen("c:\test2\test.txt", 1)
; Boucle dans les fichiers du répertoire
While 1
; Fichier en cours
$fichier = FileFindNextFile($search)
; MsgBox(1, "Test des variables", "fichier "& $fichier )
; Exit si erreur
If @error Then ExitLoop
; Récupération date de création du fichier
$date_fichier = FileGetTime($rep_ori & $fichier, 0) ; Mettre 0
; Exclusion des répertoires
$attributs=FileGetAttrib($rep_ori & $fichier)
$rep_ou_fichier=StringInStr($attributs,"D")
; Ne prend que les fichiers
If $rep_ou_fichier==0 Then
If Not @error Then
; Récupération date et heure du fichier
$yyyymd = $date_fichier[0] & "/" & $date_fichier[1] & "/" & $date_fichier[2]
; Copie du fichier si égale à la date du jour - 90
If $yyyymd = $arch Then
; FileCopy($rep_ori & $fichier, $rep_dest, 1)
; ecrite dans un fichier.txt les noms des fichiers copiés
FileWrite($file, $fichier & @CRLF)
$compteur=$compteur+1
EndIf
EndIf
EndIf
WEnd
;Copie des fichiers de la liste des fichiers recherchés dans c:\test2\fichiers.txt
; For $x = 1 to $aFind[0]
; FileCopy($rep_ori & $aFind[$x], "C:\test2\")
; Next
; Ferme la recherche
FileClose($search)
Re: [..] problème avec FileListToArrayXT
Posté : lun. 22 mars 2010 17:50
par Tlem
Il n'existe pour le moment aucun UDF permettant le filtrage sur l'age d'un fichier.
Pour cela, vous avez deux solutions :
1 - Modifier la fonction
FileListToArrayXT() afin de rajouter ce filtrage.
2 - A partir du tableau donné par
FileListToArrayXT() vous éliminez (du tableau) les plus anciens fichiers. Pour cela, il faut lire le tableau à l'envers et utiliser la fonction
_ArrayDelete() pour supprimer les éléments indésirables.

Re: [..] problème avec FileListToArrayXT
Posté : lun. 22 mars 2010 18:08
par bilbo
Merci Tlem,
S'il n'y a pas d'autres alternatives, Je pencherais plutôt pour la première solution car le tableau généré par FileListToArrayXT() dans le second cas contiendrait trop de fichiers et le traitement serait vraiment trop long et trop lourd.
Maintenant reste à trouver une âme charitable qui veux bien me donner un coup de main pour modifier la fonction FileListToArrayXT() .
A moins qu'il y ait un autre moyen d'arriver à mes fins.
A suivre ....
Re: [..] problème avec FileListToArrayXT
Posté : mar. 23 mars 2010 00:26
par Tlem
Le traitement sera pratiquement équivalent dans un cas comme dans l'autre.
Lors de l'utilisation de
FileListToArrayXT(), vous scannez un répertoire à la recherche de fichiers. Mais une fois la recherche faites, vous connaissez les fichiers, donc pas besoin de re-scanner ...
Mais si vous tenez à modifier la fonction
FileListToArrayXT(), recherchez toutes les séquences de recherche de fichiers :
Code : Tout sélectionner
$sFile = FileFindNextFile($hSearchFile)
If @error Then ExitLoop
Puis rajouter votre test, puis l'exclusion par age associée à un
ContinueLoop() selon le cas.
Re: [..] problème avec FileListToArrayXT
Posté : mar. 23 mars 2010 09:29
par bilbo
Merci Tlem,
suite à vos remarques sur les traitements équivalent, j'ai fait le constat que cela risque d'être trop lourd à faire.
Le répertoire en question contient plus d'un millions de fichiers, repartis sur 1100 répertoires.
Je n'avais pas estimé jusqu'ici la masse de données à traitées.
Ici, je pense que le tri quotidien des fichiers pour en extraire le j-90 sera beaucoup trop long.
Je réfléchi à une autre méthode d'archivage.
Toutefois, je laisse encore le sujet non résolu en attendant une hypothétique solution.
DT
Re: [..] problème avec FileListToArrayXT
Posté : mar. 23 mars 2010 14:24
par bilbo
En étudiant de plus près, l'architecture du serveur en question, je me suis aperçu que les fichiers à copier etait seulement repartis sur 10 repertoires bien précis.
J'ai donc réaliser une boucle pour rechercher dans ces repertoires et tout est ok.
Mon problème est donc résolu.
Merci