PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Suppression des répertoires et sous-répertoires vides sauf ceux situés à la racine du répertoire parent
Suppression des répertoires et sous-répertoires vides sauf ceux situés à la racine du répertoire parent
Débuté par HevaDev, 16 oct. 2020 13:59 - 2 réponses
Posté le 16 octobre 2020 - 13:59
Bonjour,

J'ai développé une procédure qui consiste à supprimer tous les répertoires et sous-répertoires vides situés à un emplacement réseau précis en utilisant les fonctions WD Langage.

SI PAS DE FICHIERS DANS LES REPERTOIRES ET SOUS REPERTOIRES==> SUPPRESSION DES REPERTOIRES ET SOUS REPERTOIRES.

Objectif : NE PAS supprimer les répertoires situés à la racine de O:\Echanges\Toto\ même s'ils sont vides.

Il s'agit de répertoires nominatif portant le nom d'utilisateurs, il ne faut pas qu'ils aient à re-créer systématiquement leur répertoire portant leur nom.

Exemple : Le parcours doit être récursif et doit s'arrêter à la racine de O:\Echanges\Dupont Alain\ même si ce répertoire est VIDE . Le parcours récursif ne doit aller jusqu'à O:\Echanges\ car cela supprime tous les répertoires vides nominatifs.


Voici le code ma procédure:

PROCEDURE SupprimerRepVides(sRep est une chaîne)

sListeRep est une chaîne UNICODE
sFichiers est une chaîne UNICODE


//Récupération liste des répertoires
sListeRep = fListeRépertoire(ComplèteRep(sRep),frRécursif + fCheminUNICODE)


//Récupération liste des fichiers
sFichiers = fListeFichier(ComplèteRep(sRep)+ "\*.*",frRécursif + fCheminUNICODE)


POUR TOUTE CHAÎNE sRep DE sListeRep SEPAREE PAR RC

SI fFichierExiste(sFichiers) = Faux ALORS

SI fRepSupprime(sRep,frRécursif + frLectureSeule) ALORS
// générer fichier de logs
gclLoggueur.Type = Loggueur.cst_type_log_info
gclLoggueur.Message = "Le répertoire " + sRep + " a été supprimé avec succès."
gclLoggueur.EcritFichier()
SINON
gclLoggueur.Type = Loggueur.cst_type_log_erreur
gclLoggueur.Message = "Le répertoire " + sRep + " ne peut être supprimé car il contient des fichiers"
gclLoggueur.Message += RC + ErreurInfo(errMessage)
gclLoggueur.EcritFichier()
FIN
FIN
FIN

Je vous remercie d'avance pour votre aide.

Heva
Membre enregistré
1 304 messages
Popularité : +47 (51 votes)
Posté le 19 octobre 2020 - 13:03
Salut HevaDev,

Tu dois faire attention à la manière d'utiliser tes variables, c'est une très mauvaise idée d'utiliser un paramètre comme une nouvelle variable (sRep) et certainement quand elle est passée par adresse.
Puisque tu demande la suppression du répertoire de manière récursive, la liste de fichiers ne sert à rien dans ta procédure, mais il faut l'utiliser à la fin pour supprimer les fichiers du répertoire.

Procedure SupprimerRepVides(LOCAL sRepAVider est une chaîne UNICODE)

sListeRep est une chaîne UNICODE
sRep est une chaîne UNICODE

//Récupération liste des répertoires
sListeRep = fListeRépertoire(ComplèteRep(sRepAVider), frRécursif + fCheminUNICODE)

// Traitement du répertoire à vider
POUR TOUTE chaîne sRep de sListeRep SEPAREE PAR RC
// On ne supprime pas le répertoire donné en paramètre, mais uniquement les répertoires en dessous du répertoire à supprimer
SI sRep <> sRepAVider ALORS
SI fRepSupprime(sRep, frRécursif + frLectureSeule) ALORS
// générer fichier de logs
gclLoggueur.Type = Loggueur.cst_type_log_info
gclLoggueur.Message = "Le répertoire '[%sRep%]' a été supprimé avec succès."
SINON
gclLoggueur.Type = Loggueur.cst_type_log_erreur
gclLoggueur.Message = "Le répertoire '[%sRep%]' ne peut être supprimé car il contient toujours des fichiers"
gclLoggueur.Message += RC + ErreurInfo(errMessage)
FIN
// Ecriture dans les logs
gclLoggueur.EcritFichier()
FIN
FIN

// On termine par supprimer uniquement les fichiers du répertoire donné en paramètre
fSupprime(ComplèteRep(sRepAVider) + "*.*", frLectureSeule)


Bon dev
A+
Daryl
Posté le 22 octobre 2020 - 11:48
Bonjour Daryl,

Merci pour ton aide, je vais tester ta correction.

Je prends bien note du conseil en terme de bonne pratique quant au passage de nouvelle variable en paramètre.

Heva