2010-12-01 6 views
7

Wie kann ich in C# feststellen, ob eine Zeichenfolge neben dem regulären Ausdruck eine lokale Ordnerzeichenfolge oder eine Netzwerkzeichenfolge ist?Wie kann ich feststellen, ob eine Zeichenfolge eine lokale Ordnerzeichenfolge oder eine Netzwerkzeichenfolge ist?

Zum Beispiel:

Ich habe eine Zeichenfolge, die "c:\a" oder "\\foldera\folderb"

+4

Selbst Ein UNC-Pfad (beginnend mit '\\\') kann auf Ihren lokalen Computer verweisen. – Oded

+0

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

+0

Es ist zu spät, aber das ist die perfekte Antwort [Link], hoffe, dass diese eine [1]: http://stackoverflow.com/questions/2243569/check-if-path-is-on -network # 2244497 – mahmoodels

Antwort

17

new Uri(mypath).IsUnc

+2

Es gibt auch IsFile, um das Gegenteil zu bestimmen –

4

denke ich, die volle Antwort auf diese Frage Nutzung der DriveInfo.DriveType Eigenschaft enthalten ist.

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 
} 

Testen Sie den Pfad zu sehen, ob es mit einem Schrägstrich Zeichen beginnt und wenn es funktioniert, dann ist es ein UNC-Pfad. In diesem Fall müssen Sie davon ausgehen, dass es sich um einen Netzwerkpfad handelt - in Wirklichkeit handelt es sich möglicherweise nicht um einen Pfad, der auf einen anderen Computer zeigt, sondern um einen UNC-Pfad, der auf Ihre lokale Maschine verweist Wahrscheinlich für die meisten Leute, denke ich, aber Sie könnten Prüfungen für diese Bedingung hinzufügen, wenn Sie eine kugelsicherere Lösung wollten.

Wenn der Pfad nicht mit einem Schrägstrich beginnt, verwenden Sie die DriveInfo.DriveType-Eigenschaft, um festzustellen, ob es sich um ein Netzlaufwerk handelt oder nicht.

-1

interessante Frage und Antworten, Ich könnte versuchen, eine einfache pathstring.Substring(1, 2) != @":\".

auch Pre-Check, dass `pathstring nicht die Länge Null oder null ist

** bearbeitet

0

Eine weitere Möglichkeit, zu prüfen, ob Pfad Punkt auf den lokalen oder Netzlaufwerk:

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