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

VB.NET Discussion :

récupérer un sous-répertoire


Sujet :

VB.NET

  1. #21
    Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    "Si tu utilisais la classe DirectoryInfo ou FileInfo tu n'aurais pas d’ambiguïté lors de la recherche exacte d'un nom de répertoire (parent, racine,...etc...... ) d'un quelconque fichier (éventuellement).
    Il ne faut pas chercher, il faut utiliser les classes que le Framework mets à ta disposition pour résoudre tes problèmes et éventuellement consulter la bible MSDN ! "

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    NomRep = Path.GetDirectoryName(Extention)
                DirRep = NomRep.Substring(12)
                DirRep2 = Microsoft.VisualBasic.Mid(DirRep, Microsoft.VisualBasic.InStr(DirRep, "\") + 1)
                DirRep3 = Microsoft.VisualBasic.Left(DirRep2, Microsoft.VisualBasic.InStr(DirRep2, "\") - 1)
    j'ai une question, je comprends le principe mais je n'arrive pas à utiliser ces classes correctement semble-t-il, est-ce que vous pouvez me donner un exemple en fonction de e que j'ai fait pour que je puisse comprendre car j'ai essayé avec toutes les commandes que j'ai trouvé dans le document de Plasarrre mais aucune ne semble pouvoir me donner la bonne réponse. Mais probablement que c'est parce que je ne sais pas les utiliser... En fait, je ne vois même pas en quoi fileinfo est utiles car il ne s'agit pas de fichier mais bien de répertoire et les répertoires en question, ne réfèrent à aucun fichier.

    merci

  2. #22
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par infodes Voir le message
    En fait, je ne vois même pas en quoi fileinfo est utiles car il ne s'agit pas de fichier mais bien de répertoire et les répertoires en question, ne réfèrent à aucun fichier.
    Parce que dans ton problème c'est le fichier (_test) qui est renommé ou déplacé d'ou la nécessite de travailler avec la classe FileInfo afin de connaitre le répertoire parent du dit fichier (en toute logique) !

    Pourquoi au lieu de te lancer dans des problèmes complexes que tu as visiblement du mal à résoudre de part un manque de pratique ou d'expérience ne pas créer un projet simple qui te permettrait d'illustrer de pratiquer les notions suivantes :

    - Lister des fichiers depuis une arborescence
    - Comment récupérer un nom de fichier (mono/multi-critères) dans la fonction de listage

    Le tout en travaillant avec la classe FileInfo par exemple ??

    Tu sais un développeur lorsqu'il ne maîtrise pas bien un concept, produit un projet à petite échelle afin de pratiquer le concept en vue de le réutiliser en version optimisé dans un plus gros projet. C'est ça programmer !

    En me basant sur ton problème suivant :

    Donc, j'ai dans un répertoire "x" un fichier que j'ai copier d'un répertoire "y". Le fichier s'appelle toujours "_test" (sans extension).Le répertoire "y" s'appelle ex: "abc-145-56_deqrt". Si le nom du répertoire commence par "erg" ("erg-859-12_deqrt"), je dois supprimer le fichier "_test". Cependant, si le nom du répertoire commence par "abc" ("abc-123-56_deqrt"), je dois renommer le fichier "_test" en "abc-123-56.pdf"

    Là je bloque car je dois aller chercher soit les 2 première lettre, les 3 première lettre, les 4 ou les 5 première lettre du répertoire. Si mon répertoire s'appelle "df-123-84_deqrt" et que je vais cherche les 5 première lettre, j'aurai "df-12" et ça ne fonctionne pas car le 12 peut très bien être 59. Donc il ne trouvera pas de correspondance et n'effacera pas le fichier "_test". Le répertoire peut aussi s'appelle "rg0000_345_deqrt"...
    Voilà grossomodo une base de travail que tu devras agrémenter car je suppose que les extensions de fichiers ne sont pas obligatoirement des pdf et que le début des répertoires parent ne commencent pas forcément par "abc" ou "erg" :

    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
     
    'On créé une procédure que l'on peut appeler depuis le corps de n'importe quelle méthode !
        Private Sub ProcessRename()
            'On boucle chaque nom complet de répertoire contenu dans le répertoire racine "C:\_test". Fait appel à la fonction getDirs()
            For Each d In getDirs("C:\_test")
                'On boucle chaque nom complet de fichiers contenu dans le répertoire que l'on est en train de parcourir dans la boucle inférieure. Fait appel  à la fonction getFiles()
                For Each f In getFiles(d)
                    'On utilise la clase FileInfo afin de récupérer une instance "fInfos" de "f" (nom de fichier complet en cours de traitement)
                    Dim fInfos As New FileInfo(f)
                    'Si le nom de fichier est égal à "_test" et que le répertoire racine du fichier en cours de traitement "f" (son intance "fInfos.DirectoryName") commence par "erg" alors on supprime le fichier en cours de traitement (condition booleenne selon la table de vérité :  1 ET 1 = 1)
                    If fInfos.Name = "_test" AndAlso fInfos.Directory.Name.StartsWith("erg") Then
                        fInfos.Delete()
                    'Sinon Si le nom de fichier est égal à "_test" et que le répertoire racine du fichier en cours de traitement "f" (son intance "fInfos.DirectoryName") commence par "abc" alors on renomme le fichier en cours de traitement (condition booleenne selon la table de vérité :  1 ET 1 = 1) en se basant sur le nom de son répertoire racine
                    ElseIf fInfos.Name = "_test" AndAlso fInfos.Directory.Name.StartsWith("abc") Then
                        My.Computer.FileSystem.RenameFile(fInfos.FullName, fInfos.Directory.Name.Replace("_deqrt", ".pdf"))
                    End If
                Next
            Next
        End Sub
     
        'Fonction retournant un tableau de String() des répertoires contenu dans le chemin (répertoire) passé en argument
        Private Function getDirs(dPath$) As String()
            Return Directory.GetDirectories(dPath, "*", SearchOption.AllDirectories)
        End Function
     
        'Fonction retournant un tableau de String() des fichiers contenu dans le chemin (répertoire) passé en argument
        Private Function getFiles(dPath$) As String()
            Return Directory.GetFiles(dPath$, "*", SearchOption.AllDirectories)
        End Function
    PS : j'ai fais exprès de nommer le répertoire racine "_test" à l'identique du nom de fichier pour te montrer l'utilité de passer par la classe FileInfo ainsi si tu cherches l'occurence "_test" dans un nom complet de fichier ça te montrera les erreur que ça peut te faire remonter !

    Personnellement j'aurais utiliser du LINQ mais c'est à titre pédagogique que j'illustre certaines notions dans ce bout de code !

    PS : Il est inutile d'appeler une méthode avec "Call" (ca fait partie des mots clés des anciennes versions de VB afin d'assurer une certaine compatibilité.....) !!

    PS : J'espère que mes infos te seront profitables et qu'avec un peu d'objectivité tu retireras cette prétention d'être un développeur DotNet....^___^

    A+

  3. #23
    Candidat au Club
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 4
    Points
    4
    Par défaut
    merci pour le bout de code mais j'ai besoin d'explication. Premièrement, oui, tout les fichiers que je dois aller chercher porte tous le même nom soit _PDF et oui tout les répertoires commence par abc ou abd etc. C'est la codification interne.

    J'ai prix votre code et l'ai modifier. Dans votre fonction, lorsque que le code lit votre fonction "getdirs", il affiche la form. Est-ce que ça veux dire qu'il y a une erreur ou il travaille?

    J'avais fait mon code en VBA mais ce n'était pas pratique et les choses se sont compliqué dernièrement, j'ai préférer le refaire en VB mais je ne savait pas dans quoi je m'embarquais. C'est trop tard pour reculer maintenant.

    Je vais regarder ce qu'est le linq et voir si je peux y arriver plus facilement puisque ça semble être la manière de procéder.

    Je n'ai aucune prétention et je ne me considère pas du tout comme développeur dotnet. Je l'ai bien mentionné, je suis débutant. Je ne sais pas ou vous avez pris cela mais si ce que j'ai écris vous a incité à penser cela bien sachez que je n'ai aucune prétention de ce genre. Mais tout le monde a le droit d'apprendre et de s'améliorer que ça vous plaise ou non et à ce que je sache, les forum sont un bon moyen d'apprendre quand la théorie n'y arrive pas.

    merci

  4. #24
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Citation Envoyé par infodes Voir le message
    merci pour le bout de code mais j'ai besoin d'explication.
    Que veux-tu comme explication...... si tu n'arrives pas à t'aider des supports d'aide existants (MSDN, TechNet, ItPro,...etc) en faisant le rapprochement avec ce genre de snippet, je peux supposer que tu n'y mets pas du tient ou alors qu'il va te falloir un professeur à domicile.....


    Citation Envoyé par infodes Voir le message
    Premièrement, oui, tout les fichiers que je dois aller chercher porte tous le même nom soit _PDF et oui tout les répertoires commence par abc ou abd etc. C'est la codification interne.
    Une bonne pratique en programmation consiste en tant que possible à créer du code générique applicable à une majeure partie des scénarios et c'est en ce sens que je te conseil d'éviter de te baser par rapport à trop de constantes. Ton code sera évolutif à souhait.

    Citation Envoyé par infodes Voir le message
    J'ai prix votre code et l'ai modifier. Dans votre fonction, lorsque que le code lit votre fonction "getdirs", il affiche la form. Est-ce que ça veux dire qu'il y a une erreur ou il travaille?
    Il va falloir être plus précis car si on veut continuer à débattre il faut qu'on parle le même langage....Un srceenshot....le code complet que tu tentes désespérément d'exécuter, à quel endroit ????

    Citation Envoyé par infodes Voir le message
    Je vais regarder ce qu'est le linq et voir si je peux y arriver plus facilement puisque ça semble être la manière de procéder.
    Tu débutes et tu veux utiliser LINQ .....qqch qui ne tourne pas ronds chez toi ??

    Citation Envoyé par infodes Voir le message
    Je n'ai aucune prétention et je ne me considère pas du tout comme développeur dotnet. Je l'ai bien mentionné, je suis débutant. Je ne sais pas ou vous avez pris cela mais si ce que j'ai écris vous a incité à penser cela bien sachez que je n'ai aucune prétention de ce genre. Mais tout le monde a le droit d'apprendre et de s'améliorer que ça vous plaise ou non et à ce que je sache, les forum sont un bon moyen d'apprendre quand la théorie n'y arrive pas.
    Ce n'est pas moi qui ai écrit cela dans ton profile......:cqfd:
    Le meilleur apprentissage pour un débutant c'est s'instruire soi-même au préalable afin d'acquérir des bases.
    La théorie s'applique au travers des cas concrets et si elle n'est pas bien assimilé alors il n'est pas utile de demander de l'aide pour résoudre un problème : ça s'appelle la facilité très cher !

    Ceux qui comptes sur les autres prennent et ne donnent jamais c'est bien connu......

    A+

    PS : je vais commenter le code parce que j'aime donner !

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Récupérer un sous répertoire
    Par Cristalinz dans le forum VBScript
    Réponses: 1
    Dernier message: 06/06/2014, 11h13
  2. Récupérer des fichiers dans des repertoires et sous répertoires
    Par philcphilc dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 05/09/2013, 19h37
  3. [XL-2003] Récupérer répertoire et sous répertoire sans les fichiers
    Par dlight dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/05/2013, 19h13
  4. Réponses: 7
    Dernier message: 10/12/2007, 11h27
  5. Comment récupérer les sous répertoires d'un répertoire
    Par charliejo dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/02/2006, 08h47

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