2010-12-01 29 views
7

¿Cómo puedo determinar en C# si una cadena es una cadena de carpeta local o una cadena de red además de la expresión regular?¿Cómo puedo determinar si una cadena es una cadena de carpeta local o una cadena de red?

Por ejemplo:

tengo una cadena que puede ser "c:\a" o "\\foldera\folderb"

+4

Incluso una ruta UNC (comenzando con '\\\') puede estar apuntando a su máquina local. – Oded

+0

ver 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

es demasiado tarde, pero esta es la respuesta perfecta [link], espero que esto alguien [1]: http://stackoverflow.com/questions/2243569/check-if-path-is-on -network # 2244497 – mahmoodels

Respuesta

17

new Uri(mypath).IsUnc

+2

También hay IsFile para determinar lo opuesto –

4

Creo que la respuesta completa a esta pregunta es para incluir el uso de la propiedad 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 
} 

Pruebe la ruta para ver si comienza con un slash char y si lo hace, entonces es una ruta UNC. En este caso, deberá suponer que se trata de una ruta de red, en realidad puede no ser una ruta que apunte a una PC diferente, ya que en teoría podría ser una ruta UNC que apunta a su máquina local, pero esto no es así. probablemente para la mayoría de las personas, supongo, pero podría agregar cheques para esta condición si quisiera una solución más a prueba de balas.

Si la ruta de acceso no comienza con una barra diagonal, utilice la propiedad DriveInfo.DriveType para determinar si es una unidad de red o no.

-1

preguntas y respuestas interesantes, Podría probar un simple pathstring.Substring(1, 2) != @":\".

también pre-compruebe que `pathstring no es cero longitud o nula

** editado

0

una forma más para comprobar si el punto camino a la unidad local o de red:

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