2010-12-01 2 views
7

Comment puis-je déterminer dans C# si une chaîne est une chaîne de dossier local ou une chaîne de réseau en plus une expression régulière?Comment puis-je déterminer si une chaîne est une chaîne de dossiers locale ou une chaîne réseau?

Par exemple:

J'ai une chaîne qui peut être "c:\a" ou "\\foldera\folderb"

+4

Même un chemin UNC (commençant par '\\\') peut pointer vers votre machine locale. – Oded

+0

voir http://stackoverflow.com/questions/520753/what-is-the-correct-way-to-check-if-a-path-is-an-unc-path-or-a-local-path/ 520796 # 520796 – nos

+0

Il est trop tard, mais c'est une réponse parfaite [link], espérons que quelqu'un un [1]: http://stackoverflow.com/questions/2243569/check-if-path-is-on -Réseau # 2244497 – mahmoodels

Répondre

17

new Uri(mypath).IsUnc

+2

Il y a aussi IsFile pour déterminer le contraire –

4

Je pense que la réponse complète à cette question est d'inclure l'utilisation de la propriété DriveInfo.DriveType.

public static bool IsNetworkPath(string path) 
{ 
    if (!path.StartsWith(@"/") && !path.StartsWith(@"\")) 
    { 
     string rootPath = System.IO.Path.GetPathRoot(path); // get drive's letter 
     System.IO.DriveInfo driveInfo = new System.IO.DriveInfo(rootPath); // get info about the drive 
     return driveInfo.DriveType == DriveType.Network; // return true if a network drive 
    } 

    return true; // is a UNC path 
} 

Testez le chemin pour voir s'il commence par une barre oblique et si c'est le cas, c'est un chemin UNC. Dans ce cas, vous devez supposer qu'il est un chemin réseau - en réalité, il ne peut pas être un chemin qui pointe vers un autre PC comme il pourrait en théorie être un chemin UNC qui pointe vers votre machine locale, mais ce n'est pas probablement pour la plupart des gens je suppose, mais vous pourriez ajouter des contrôles pour cette condition si vous vouliez une solution plus pare-balles.

Si le chemin ne commence pas par une barre oblique ombles puis utilisez la propriété DriveInfo.DriveType pour déterminer si elle est un lecteur réseau ou non.

-1

question intéressante et réponses, Je pourrais essayer un simple pathstring.Substring(1, 2) != @":\".

également pré-vérifier que `pathstring n'est pas une longueur nulle ou nulle

** édité

0

Une autre façon de vérifier si le point de chemin de lecteur local ou réseau:

var host = new Uri(@"\\foldera\folderb").Host; //returns "foldera" 
if(!string.IsNullOrEmpty(host)) 
{ 
    //Network drive 
} 
Questions connexes