PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → Arborescence fichier ZIP dans une table Hiérarchique
Arborescence fichier ZIP dans une table Hiérarchique
Débuté par Cédric_34, 07 sep. 2023 09:27 - Aucune réponse
Membre enregistré
949 messages
Posté le 07 septembre 2023 - 09:27
Bonjour,
J'ai adapté mon code d'une arborescence dans un fichier ZIP pour l'appliquer à une table Hiérarchique.
Ce code fonctionne pour un fichier à la racine du ZIP (sans répertoire) et/ou pour les fichiers situés dans les répertoires.
En revanche, je n'ai pas réussi à lister les répertoires si ils sont vides (donc le code n'est pas adapté à ce cas de figure pour le moment).
Les fonctions "zipListeFichier" et "zipNbFichier" ne semblent pas traiter les répertoires.

Ma question : Ai-je loupé quelque chose ou y a t-il un manque concernant la liste des répertoires dans un ZIP ?

C'est ennuyeux car sans cela, le résultat ne me permet pas de savoir si j'ai un répertoire vide de disponible dans l'archive.
Certains me diront de décompresser l'archive et de lister les fichiers et répertoires, mais ce n'est pas le but.
Merci à ceux qui auraient un élément de réponse.

En attendant, voici le code sans les répertoires vides :

MonArchive est un zipArchive
sFichier est une chaîne
ListeFichier est une chaîne
tabRepertoire est tableau de chaînes
Nbniveau est un entier
sFils est une chaîne
sParent est une chaîne
IndiceInsertion est un entier

NomTable est un Champs <- TABLEH_Archive // Indiquer ici le nom de la table
ColonneHierarchie est chaîne = "COL_Hierarchie" // Indiquer ici le nom de la colonne dans la table

// Attention ce code ne traite pas les répertoires vides (de toute façon, zipListeFichier ne les liste pas)

sFichier = fSélecteur("", "Sélectionnez un fichier", "Fichier zip (*.*)"+TAB+"*.zip", "*")

SI zipOuvre(MonArchive, sFichier, zipLecture) = 0 ALORS
ListeFichier = zipListeFichier(MonArchive)
SI zipNbFichier(MonArchive) = 0 ALORS
Info("Aucun fichier dans l'archive")
RETOUR
FIN

Sablier(Vrai)

TableSupprimeTout(NomTable)

POUR TOUTE chaîne saCheminFichier de ListeFichier SEPAREE PAR RC
tabRepertoire = ChaîneDécoupe(saCheminFichier, "\")
Nbniveau = tabRepertoire.Occurrence()
SI Nbniveau > 1 ALORS // Traitement des fichiers Hors racine (dans un répertoire)
sParent = ""
sFils = tabRepertoire[1]
SI TableChercheFils(ColonneHierarchie, sFils, Vrai, 0) = -1 ALORS // On vérifie si le premier élément existe à la racine
TableAjouteFils(NomTable, sParent, sFils)
FIN
sParent = sFils
POUR I = 2 _À_ Nbniveau - 1 // on ne traite pas le dernier niveau qui est le fichier et qui fait l'objet d'un traitement particulier
sFils = tabRepertoire[I]
SI TableChercheFils(ColonneHierarchie, sFils, Vrai, sParent) = -1
TableAjouteFils(NomTable, sParent, sFils)
FIN
sParent += [TAB] + sFils
FIN
// On insère le dernier niveau qui est le fichier
sFils = tabRepertoire[Nbniveau]
IndiceInsertion = TableAjouteFils(NomTable, sParent, sFils)
NomTable[IndiceInsertion]..ImageDéroulée = Null
NomTable[IndiceInsertion]..ImageEnroulée = Null
SINON // On traite le cas d'un fichier à la racine (ne se trouvant donc pas dans un répertoire)
IndiceInsertion = TableAjouteFils(NomTable, 0, saCheminFichier)
NomTable[IndiceInsertion]..ImageDéroulée = Null
NomTable[IndiceInsertion]..ImageEnroulée = Null
FIN
FIN
Sablier(Faux)
TableTrie(NomTable)
FIN


Cdlt