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 :

Récupérer Noms UNC


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Par défaut Récupérer Noms UNC
    Bonjour,

    J'ai développé une application qui scrute des répertoires réseau distants afin de récupérer régulièrement leur contenu. L'utilisateur peut configurer les répertoires en question avec un FolderBrowserDialog.

    Le problème est que de cette manière il indique les chemins d'accès aux répertoires réseau à l'aide des noms de partage windows (ex : K:\\RépertoireCible). Hors pour des raisons techniques j'ai besoin d'accèder à ces répertoires à l'aide du nom complet UNC (ex: \\170.30.27.1\NomPartage\RépertoireCible).

    Comment obtenir ce nom complet UNC à partir de la lettre de lecteur Windows (obtenir \\170.30.27.1\NomPartage à partir de K:\\) ?

    Merci d'avance en espérant qu'il y ait une solution simple.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    J'ai répondu à une question similaire récemment
    http://www.developpez.net/forums/d11...ecteur-reseau/
    C'est du VB, mais ça devrait pas être trop dur à traduire

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2009
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2009
    Messages : 317
    Par défaut
    Bonjour, en fouillant un peu sur le net, j'ai trouver ce sample de code qui devrait t'aider, je ne l'ai pas tester, je te laisse le loisir de le faire :

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.InteropServices;
    using System.IO;
     
    namespace WiredPrairie.Samples
    {
        public static class Pathing
        {
            [DllImport("mpr.dll", CharSet = CharSet.Unicode, SetLastError = true)]
            public static extern int WNetGetConnection(
                [MarshalAs(UnmanagedType.LPTStr)] string localName,
                [MarshalAs(UnmanagedType.LPTStr)] StringBuilder remoteName,
                ref int length);
            /// <summary>
            /// Given a path, returns the UNC path or the original. (No exceptions
            /// are raised by this function directly). For example, "P:\2008-02-29"
            /// might return: "\\networkserver\Shares\Photos\2008-02-09"
            /// </summary>
            /// <param name="originalPath">The path to convert to a UNC Path</param>
            /// <returns>A UNC path. If a network drive letter is specified, the
            /// drive letter is converted to a UNC or network path. If the
            /// originalPath cannot be converted, it is returned unchanged.</returns>
            public static string GetUNCPath(string originalPath)
            {
                StringBuilder sb = new StringBuilder(512);
                int size = sb.Capacity;
     
                // look for the {LETTER}: combination ...
                if (originalPath.Length > 2 && originalPath[1] == ':')
                {
                    // don't use char.IsLetter here - as that can be misleading
                    // the only valid drive letters are a-z && A-Z.
                    char c = originalPath[0];
                    if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
                    {
                        int error = WNetGetConnection(originalPath.Substring(0, 2),
                            sb, ref size);
                        if (error == 0)
                        {
                            DirectoryInfo dir = new DirectoryInfo(originalPath);
     
                            string path = Path.GetFullPath(originalPath)
                                .Substring(Path.GetPathRoot(originalPath).Length);
                            return Path.Combine(sb.ToString().TrimEnd(), path);
                        }
                    }
                }
     
                return originalPath;
            }
        }
    }
    Edit: bon ben coiffer sur le poteau comme on dit, qui plus est la solution de tomlev semble plus propre ^^

  4. #4
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Par défaut
    Merci pour vos réponses rapides.

    Celle de tomlev me parait la plus pertinente. En fait j'avais déjà effectué des recherches et avait récupéré des bribes de réponses qui effectivement me renvoyaient soit à WMI soit aux API Win32. J'espérais qu'il y ait une solution plus "native" par rapport au C#.

    Je vais essayer par WMI, encore merci.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Aeronia Voir le message
    Edit: bon ben coiffer sur le poteau comme on dit, qui plus est la solution de tomlev semble plus propre ^^
    Bah justement je préfère la tienne... il vaut mieux se reposer sur les fonctionnalités existantes du système plutôt que d'essayer de les réinventer.

    Je connaissais pas cette API WNetGetConnection en tous cas, je pense que ça va me servir

  6. #6
    Membre confirmé
    Inscrit en
    Juin 2004
    Messages
    69
    Détails du profil
    Informations forums :
    Inscription : Juin 2004
    Messages : 69
    Par défaut
    En utilisant la méthode de la base de registre, ça fonctionne parfaitement. Si j'ai le temps j'essaierai les deux autres par la suite pour les comparer et éventuellement opter pour la meilleure.

    Merci beaucoup.

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

Discussions similaires

  1. Comment récupérer nom de domaine pris chez Lycos ?
    Par cortex024 dans le forum Domaines
    Réponses: 7
    Dernier message: 21/07/2009, 11h01
  2. récupérer nom de champs et type de champs
    Par jexl dans le forum Requêtes
    Réponses: 2
    Dernier message: 07/03/2006, 13h49
  3. Réponses: 12
    Dernier message: 02/03/2006, 14h13
  4. [ADO.Net][C# 2.0]Comment récupérer nom colonne PrimaryKey?
    Par superbobo dans le forum Accès aux données
    Réponses: 1
    Dernier message: 18/01/2006, 17h34
  5. [ActionEvent] Récupérer nom du composant émetteur
    Par mouloude dans le forum Composants
    Réponses: 4
    Dernier message: 29/10/2004, 17h19

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