OVH Cloud OVH Cloud

Extraction de l'arborescence de fichier

3 réponses
Avatar
fred87
Bonjour,

Je cherche depuis le code VBA à faire une copie de répertoire avec tout son
contenu
et cela quelques soit les attribus des fichiers ou sous dossier (Archive,
Caché, lecture seul etc ..).

Le but est d'effectuer une copie régulière d'un dossier afin de l'archiver.
Il faut donc aussi que la nouvelle copie écrase les sous dossier et fichier
déja existant.

J'ai essayé la methode suivante:

----------------------------------------------------------------
Set fso = CreateObject("Scripting.FileSystemObject")

fso.CopyFolder Source, Destination, True
----------------------------------------------------------------

mais si le fichier à la propriété "lecture seule" il n'écrase pas l'ancien
fichier si existant.

Existe t-il une autre méthode qui pourrait résoudre mon problème.
Le plus serait de pouvoir paramétrer la copie seulement des fichiers qui ont
été
modifiés.

Je pense essayer de lire l'arborescence des fichier et l'inclure dans une
table, mais le problème des sous dossier et difficile à gérer.

Merci d'avance pour toute info

3 réponses

Avatar
DJ

J'ai essayé la methode suivante:

----------------------------------------------------------------
Set fso = CreateObject("Scripting.FileSystemObject")

fso.CopyFolder Source, Destination, True
----------------------------------------------------------------

mais si le fichier à la propriété "lecture seule" il n'écrase pas
l'ancien fichier si existant.

bonjour,

le true doit normalement ecraser les fichiers existant mais il precise pas
pour le readonly....
dans ce cas perso je les repasse en normal:
DJ

Function ChgAttribNormal(ByVal Dossier)
Rem
***************************************************************************
Rem * Objet : Change L'attribut des fichiers en normal pour un dossier
*
Rem * et ses sous dossiers (recursif)
*
Rem * Entrées: Chemin du dossier de depart
*
Rem *
*
Rem * Retours: Chaine de resultat
*
Rem *
*
Rem
***************************************************************************
Rem *

Dim MyFSO, Fold, FoldCol, F, Fic, strDebug
Set MyFSO = CreateObject("Scripting.FileSystemObject")
On Error Resume Next
If MyFSO.folderexists(Dossier) Then
Set Fold = MyFSO.getfolder(Dossier)
For Each F In Fold.Files
Set Fic = MyFSO.getfile(F)
Fic.Attributes = 0
Next
Set FoldCol = Fold.subfolders
For Each Fold In FoldCol
strDebug = ChgAttribNormal(Fold.Path)
Next
Else
strDebug = "ERREUR le dossier" + Dossier + " nexiste pas !"
End If
ChgAttribNormal = strDebug
End Function

Avatar
fred87
Bonjour DJ

Merci pour ta réponse, la fonction de forçage des attributs me convient
bien, mais il me reste un petit
problème : c'est de remonter chaque dossier d'une arborescence pour y
appliquer la fameuse fonction.

Quelle serait donc la méthode pour connaitre les dossiers se trouvant dans
un dossier eux même dans un autre dossier etc etc..

Je n'arrive pas à trouver une methode qui extrait depuis un répertoire
source tout les dossiers présents.

En core merci pour ton aide

FRED87
Avatar
DJ
fred87 wrote:
Bonjour DJ

Merci pour ta réponse, la fonction de forçage des attributs me
convient bien, mais il me reste un petit
problème : c'est de remonter chaque dossier d'une arborescence pour y
appliquer la fameuse fonction.

Quelle serait donc la méthode pour connaitre les dossiers se trouvant
dans un dossier eux même dans un autre dossier etc etc..

Je n'arrive pas à trouver une methode qui extrait depuis un répertoire
source tout les dossiers présents.

En core merci pour ton aide

FRED87


c'est pas top clair la...

tu veux partir d'un dossier parent pour descendre dans toute l'arberescence
des Sous dossiers et sous sous puis sous sous sous dossiers .....jusqu'a
trouver du petrole ??? :-)

ma fonction s'en occupe DEJA ! techniquement ca s'appelle une fonction
recursive.
(ca te rapellera peut-etre des souvenirs sauf si tu as trop secher les cours
de math) .

si je comprends bien tu lis pas vraiment ce que je reponds , c'est dans la
premiere ligne de ma fonction:
Rem * Objet : Change L'attribut des fichiers en normal pour un dossier
*
Rem * et ses sous dossiers (recursif)

je suis tres decu !
visiblement je sens qu'une petite explication pour que tu puisses t'en
resservir par ailleur te fearais plaisir non ?
alors voila :
je teste l'existance du dossier de depart et apres
je parcours l'ensemble des Fichiers du dossier:
For Each F In Fold.Files
Set Fic = MyFSO.getfile(F)
Fic.Attributes = 0
Next
Apres seulement je parcours la liste des dossiers de ce dossier de depart :
Set FoldCol = Fold.subfolders
For Each Fold In FoldCol
strDebug = ChgAttribNormal(Fold.Path)
Next
et pour chaque sous dossier ma fonction s'appelle elle meme en se passant en
parametre le chemin complet du sous dossier. Le systeme se debrouille pour
gerer les variables a chaque niveau d'appel de la fonction.
Fastoche non ?
DJ