visual studio plantillas para c# network-programming getfiles getfileversion

c# - para - plantillas de visual studio



Usando C#, cómo saber si una carpeta está ubicada en una red o no (6)

Usando C #, me gustaría que mi aplicación me devuelva si una carpeta (con una ruta ya conocida) está ubicada en una red o en mi computadora.

¿Cómo puedo hacer eso?


Basado en las respuestas de @jgauffin y @Daniel, puedes probar este pequeño truco:

private static bool IsNetwork(String path) { if (path.StartsWith(@"//")) return true; var dir = new DirectoryInfo(path); var drive = new DriveInfo(dir.Root.ToString()); return drive.DriveType == DriveType.Network; }


Pruebe lo siguiente desde Shell Lightweight Utility API :

class Class { [DllImport("shlwapi.dll")] private static extern bool PathIsNetworkPath(string Path); [STAThread] static void Main(string[] args) { string strPath = "D://Temp//tmpfile.txt"; bool blnIsLocalPath = IsLocalPath(strPath); Console.WriteLine(blnIsLocalPath.ToString()); Console.ReadLine(); } private static bool IsLocalPath(string Path) { return !PathIsNetworkPath(Path); } }

Cosas a tener en cuenta:

  • Las rutas que comienzan con dos caracteres de barra invertida (/) se interpretan como rutas de Convención de nomenclatura universal (UNC).
  • Las rutas que comienzan con una letra seguida de dos puntos (:) se interpretan como una unidad de red montada. Sin embargo, PathIsNetworkPath no puede reconocer una unidad de red asignada a una letra de unidad a través del comando SUBST de Microsoft MS-DOS o la función DefineDosDevice

Puede usar el siguiente método para obtener la ruta UNC para una carpeta. No es exactamente lo que estás buscando pero podría ser útil

public static string GetUniversalPath(string folderPath) { if (String.IsNullOrEmpty(folderPath) || folderPath.IndexOf(":") > 1) return folderPath; if (folderPath.StartsWith("//")) { return folderPath; } ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT RemoteName FROM win32_NetworkConnection WHERE LocalName = ''" + folderPath.Substring(0, 2) + "''"); foreach (ManagementObject managementObject in searcher.Get()) { string remoteName = managementObject["RemoteName"] as String; if (!String.IsNullOrEmpty(remoteName)) { remoteName += folderPath.Substring(2); return remoteName; } } return folderPath; }


Si está hablando de una unidad de red mapeada, puede usar la propiedad DriveType :

var driveInfo = new DriveInfo("S:/"); if(driveInfo.DriveType == DriveType.Network) // do something



var dirInfo = new DirectoryInfo(yourPath); var driveInfo = new DriveInfo(dirInfo.Root); if (driveInfo.DriveType == DriveType.Network) Console.WriteLine("Is a network drive!");