IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Lister les répertoires sans fichier (pas vide)


Sujet :

WinDev

  1. #1
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut Lister les répertoires sans fichier (pas vide)
    Bonjour,

    Je souhaite lister dans une table tous les dossiers sans fichier d'un gros répertoire.
    ça marche à moitié car si dans un dossier sans fichier (A) il y a un dossier vide (B), j'ai les 2 dossiers de listé :
    C:\TEST\A
    C:\TEST\A\B
    alors que je ne veux que celui du plus bas niveau : C:\TEST\A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sRep, sRepertoires, sFichiers sont des chaînes
     
    sRepertoires = fListeRépertoire("C:\TEST")
    POUR TOUTE CHAÎNE sRep DE sRepertoires SEPAREE PAR RC
    	sFichiers = fListeFichier(sRep+"\*", frRécursif)
    	SI sFichiers = "" ALORS TableAjouteLigne(TABLE, sRep)
    FIN
    Auriez-vous une idée ? un exemple ?

    Merci d'avance !!!

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Ce que je ferais :

    Lister les fichiers présents (de façon récursive) sur le premier niveau de l'arborescence en premier lieu.

    S'il n'y a aucun fichier alors ça en sert à rien de lister les répertoires (pour avoir le premier niveau de l'arborescence).
    S'il y a des fichiers lister les sous-répertoires et leurs appliquer le même traitement !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  3. #3
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Merci pour ton aide Michel...

    malheureusement soit j'ai pas compris l'idée soit je ne vois pas comment faire...
    du point vu code, faut une fonction qui s'appelle récursivement ?

  4. #4
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    PROCEDURE ListeRepertoireVide(rep="C:\Test")
    liste_rep est une chaîne
     
    IF NOT ControleRep(rep) THEN
    	liste_rep=fListeRépertoire(rep)
    	FOR EACH STRING dir OF liste_rep SEPARATED BY RC
    		ListeRepertoireVide(dir)
    	END
    ELSE
    	Trace(rep)
    END
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    PROCEDURE ControleRep(pRep)
     
     
    sFic est une chaîne = fListeFichier(ComplèteRep(pRep)+"*",frRécursif)
    IF sFic = "" THEN
    	RENVOYER True
    ELSE
    	RENVOYER False
    END
    C'est du vite fait mal fait donc à tester !!!
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  5. #5
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut Une solution parmi d'autres
    Bonjour,
    Voici comment je fais dans un de mes programmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Initialise_le_listage() //des fichiers
    r = fListeFichier(Mon_chemin_complet, "Traite_fichiers" )
    Résultat_de_l_opération = i + " fichier(s) présent(s). Analyse terminée"
    Calcule__la_durée()
    La procédure traite_fichiers te donne la réponse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    PROCEDURE Traite_fichiers(chemin, nom_du_fichier2)
    Mon_contenu += nom_du_fichier2 + CR
    i += 1
    Résultat_de_l_opération = i + " fichier(s) ou répertoire(s) présent(s.). Analyse en cours dans " + CR + chemin 
    FenRepeint(Utilitaire)
    CAS ERREUR:	
    Zone_de_résultats  = ErreurInfo(errMessage)
    CAS EXCEPTION:
    Zone_de_résultats = ExceptionInfo(errMessage)
    Si mon contenu est vide ( = "") alors ton répertoire est vide de fichier.
    Et tu continue ta boucle.

    Lister les répertoires
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Initialise_le_listage() //des répertoires
    fListeRépertoire(Mon_chemin, Traite_répertoires)
     //ne jamais, jamais!, utiliser de champ libellé dans les manipulations de chaînes
    Résultat_de_l_opération = i + " répertoire(s) présent(s). Analyse terminée"
    Calcule__la_durée()
    En couplant les deux, tu obtiens ton résultats.
    Cordialement
    nb : Je peux t'envoyer mon utilitaire tout fait, il contient quelques bonus du type presse-papiers
    Mon dernier livre Si c'est simple, c'est du Windev, version 2014, disponible sur Lulu.com, mot-clé Windev.
    http://www.lulu.com/shop/search.ep?t...ch=lulu.com&q=

  6. #6
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Michel : Ton code affiche les sous-dossiers dont \A\B
    J'ai remarqué que le parcours passe sur tous les dossiers de rang n puis n+1... Il ne parcours pas le dossier dans sa totalité. Est-ce une raison ?

    jdsetls : J'essaye ça, merci.

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Je ne sais pas ce qu'il se passe chez toi mais chez moi (je viens de tester) j'ai recréé l'arborescence que tu as défini et je liste uniquement les dossiers qui contiennent des dossiers vides ou qui sont vides sans lister leurs sous-répertoires (vides).... je te laisse adapter en fonction de tes besoins mais (pour moi) le principe est là !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  8. #8
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Michel... je ne comprends pas.

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    PROCEDURE RepVides(sRep est une chaîne)
     
    Trace("")
    Trace("RepVides > "+sRep)
    bResultat est un booléen = bRepVides(sRep)
    SI PAS bResultat ALORS
    	sRepertoires est une chaine = fListeRépertoire(sRep)
    	POUR TOUTE CHAÎNE sDir DE sRepertoires SEPAREE PAR RC
    		RepVides(sDir)
    	END
    SINON
    	Trace(sRep+" -----------> sans fichier !")
    FIN
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    PROCEDURE bRepVides(sRep)
     
    sFic est une chaîne = fListeFichier(ComplèteRep(sRep)+"*", frRécursif)
    SI sFic = "" ALORS
    	RENVOYER Vrai
    SINON
    	RENVOYER Faux
    END
    Voici mon arborescence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    C:\a\
    C:\a\fichier-a.txt
    C:\a\b1-vide\
    C:\a\b2\
    C:\a\b2\fichier-b2-1.txt
    C:\a\b2\fichier-b2-2.txt
    C:\a\b2\c1-sans-fichier\
    C:\a\b2\c1-sans-fichier\d1-vide\
    C:\a\b2\c2\
    C:\a\b2\c2\fichier-c2-1.txt
    C:\a\b2\c2\fichier-c2-2.txt
    C:\a\b2\c2\d2-vide\
    et voici mes traces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    RepVides > C:\a\
     
    RepVides > C:\a\b1-vide
    C:\a\b1-vide -----------> sans fichier !
     
    RepVides > C:\a\b2
     
    RepVides > C:\a\b2\c1-sans-fichier
    C:\a\b2\c1-sans-fichier -----------> sans fichier !
     
    RepVides > C:\a\b2\c2
     
    RepVides > C:\a\b2\c2\d2-vide
    C:\a\b2\c2\d2-vide -----------> sans fichier !
     
    RepVides > C:\a\b2\c1-sans-fichier\d1-vide
    C:\a\b2\c1-sans-fichier\d1-vide -----------> sans fichier !
     
    RepVides > C:\a\b2\c2\d2-vide
    C:\a\b2\c2\d2-vide -----------> sans fichier !
     
    RepVides > C:\a\b2\c1-sans-fichier
    C:\a\b2\c1-sans-fichier -----------> sans fichier !
     
    RepVides > C:\a\b2\c2
     
    RepVides > C:\a\b2\c2\d2-vide
    C:\a\b2\c2\d2-vide -----------> sans fichier !
     
    RepVides > C:\a\b2\c1-sans-fichier\d1-vide
    C:\a\b2\c1-sans-fichier\d1-vide -----------> sans fichier !
     
    RepVides > C:\a\b2\c2\d2-vide
    C:\a\b2\c2\d2-vide -----------> sans fichier !
    Bizarrement, certains dossiers sont parcourus 2 fois !

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Ce qui me rassure c'est les résultats sont exacts !!!
    Par contre passe tout ça au débugueur et tu trouveras !
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  10. #10
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    oui ils sont exacts...
    mais il me liste un dossier qui ne doit pas : "C:\a\b2\c1-sans-fichier\d1-vide"
    car "c1-sans-fichier" ne contient aucun fichier


  11. #11
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Ok je pense avoir compris il faut que le fListeRepertoire ne soit pas récursif (donc option frNonRécursif) afin d'éviter les doubles entrées et le listing des sous-réps...
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  12. #12
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    non...
    ça change rien

  13. #13
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    je viens de tester chez moi ça change tout... je parle de la récursivité pour la fonction fListeRepertoire()
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  14. #14
    Membre actif
    Inscrit en
    Octobre 2005
    Messages
    908
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 908
    Points : 271
    Points
    271
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    je viens de tester chez moi ça change tout... je parle de la récursivité pour la fonction fListeRepertoire()
    le boulet que je suis !!!!!
    effectivement l'option frNonRécursif pour fListeRepertoire() dans la procédure RepVides() change tout au résultat !
    et pas comme j'avais essayé pour fListeFichier()...

    Merci Michel !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lister les propriétés des fichiers d'un répertoire
    Par L27207 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 16/05/2013, 11h32
  2. [WD14] Lister les extensions de fichier dans un répertoire
    Par LuckyLuke56 dans le forum WinDev
    Réponses: 20
    Dernier message: 01/08/2011, 17h02
  3. [AC-2010] Lister les noms des fichiers d'un répertoire
    Par Invité dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/05/2011, 13h51
  4. [Batch] Lister les répertoires dans un fichier
    Par Olivier Regnier dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 30/03/2010, 22h35
  5. Lister les dossiers et fichiers d'un répertoire
    Par scorpia dans le forum ASP
    Réponses: 2
    Dernier message: 11/04/2006, 18h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo