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

C# Discussion :

Pourquoi new DirectoryInfo("C:"); retourne le dossier courant ?


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut Pourquoi new DirectoryInfo("C:"); retourne le dossier courant ?
    Bonjour à tous,

    Il y a des mystères que j'aimerais bien élucider...

    Alors que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryInfo dir = new DirectoryInfo("D:");
    retourne le dossier du Lecteur D,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryInfo dir = new DirectoryInfo("E:");
    retourne le dossier du Lecteur E,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryInfo dir = new DirectoryInfo("F:");
    retourne le dossier du Lecteur F,

    etc...

    Et bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DirectoryInfo dir = new DirectoryInfo("C:");
    retourne le dossier courant !!!!!!!!!!!!!!!!!

    La question est : Pourquoi ?

    Je me pose cette question car je suis obligé d'utiliser une liste des lecteurs (C:, D:, etc...) sans antislash à la fin, pour remplir un TreeView. Je dis sans antislash, car si jamais je veux récupérer le FullPath d'un de mes nodes, et s’il y a un antislash dans le nom du lecteur, j'aurais un double antislash dans le FullPath du node ! Par exemple, node.FullPath retourne : "C:\\Windows\system32".

    Voilà, si quelqu'un à une réponse ou une solution, je lui en serais très reconnaissant !

    Merci !

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    On peux éventuellement tester avec ce code, pour voir les sous-dossiers du dossier et s'apercevoir que pour le lecteur "C:", on a les dossiers du dossier dans lequel s'exécute le programme :

    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
     
    using System.IO;
    using System.Windows.Forms;
     
    namespace WindowsFormsApplication2
    {
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
     
                // POUR LE LECTEUR H:
                DirectoryInfo dir = new DirectoryInfo("H:");
                DirectoryInfo[] list = dir.GetDirectories();
                foreach (DirectoryInfo i in list) MessageBox.Show(i.FullName);
     
                // POUR LE LECTEUR C:
                dir = new DirectoryInfo("C:");
                list = dir.GetDirectories();
                foreach (DirectoryInfo i in list) MessageBox.Show(i.FullName);
            }
        }
    }

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    En tant qu'ancien utilisateur de MS-DOS, voilà ce que je suppute :
    • ouvre une fenêtre de commande (démarrer => exécuter => cmd)
    • le prompt montre (par exemple) : c:\documents and settings\TOTO\
    • tape "d:" : ca t'amène sur d:\
    • tape cd folder, où folder est un dossier de d ; ca t'amène sur d:\folder
    • tape "c:" : ca te ramène sur c:\documents and settings\TOTO\
    • tape "c:" : ca te laisse dans c:\documents and settings\TOTO\
    • tape d: ca t'amène de nouveau sur d:\folder


    Donc en gros, C: n'est pas la racine de C, c'est le répertoire courant de C. La racine de C, c'est C:\.

    D'ailleurs, la barre d'adresse de l'explorer affiche c:\ quand on est à la racine, et c:\folder (sans antislash !) sinon.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    Ca a le mérite d'être clair.

    Merci !

    Mais maintenant... Comment avoir un [Directory-]TreeView où par exemple TreeView.Nodes[4].FullPath ne retourne pas 2 antislash ? Comme ceci: "C:\\Windows\system32".

    Ou où trouver un composant Directory TreeView sans ce problème ?

  5. #5
    Expert confirmé

    Avatar de Philippe Vialatte
    Homme Profil pro
    Architecte technique
    Inscrit en
    Juillet 2004
    Messages
    3 029
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 3 029
    Par défaut
    question bête, mais, vu que c'est ton appli qui gère le path, tu ne peux pas faire un Replace(@":\\", @":\") ?

    Mon Blog

    The Cake is still a lie !!!



    Vous voulez contribuer à la rubrique .NET ? Contactez-moi par MP.
    Vous voulez rédiger des articles pour la rubrique .NET ? Voici la procédure à suivre.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Février 2009
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 163
    Par défaut
    Tout est possible. Mais gérer le remplacement dans une quinzaine de fonctions ça commence à être lourd. Et ça va l'être encore plus car nous sommes plusieurs sur le projet, mais également parce que c'est une application qui va vivre, et que je ne serais pas forcément derrière la personne qui va prendre les rênes pour lui dire "ah oui, mais attention, ici, ceci ; là-bas, cela...". Trouver des solutions simples le plus tôt possible, c’est autant de travail en moins en terme de documentation et de temps passé en explications et compréhension.

    Sinon le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(string.Contains) string.Replace(,);
    est la solution que j'ai retenu au départ. Mais je pensais pouvoir me passer de ces infâmes antislashs.

Discussions similaires

  1. [MySQL] Pourquoi dois-je utiliser des "quotes penchées" dans mes requêtes?
    Par v4np13 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/03/2008, 00h23

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