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.Usando C#, cómo saber si una carpeta está ubicada en una red o no
¿Cómo puedo hacer eso?
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.Usando C#, cómo saber si una carpeta está ubicada en una red o no
¿Cómo puedo hacer eso?
Si usted está hablando de una unidad de red, puede utilizar el DriveInfo
's DriveType
property:
var driveInfo = new DriveInfo("S:\");
if(driveInfo.DriveType == DriveType.Network)
// do something
Original Answer de otra cuestión de forma, Check if path is on network.
Uso PathIsNetworkPath (PInvoke reference):
class Program
{
[DllImport("shlwapi.dll")]
private static extern bool PathIsNetworkPath(string pszPath);
static void Main(string[] args)
{
Console.WriteLine(PathIsNetworkPath("i:\Backup"));
}
}
var dirInfo = new DirectoryInfo(yourPath);
var driveInfo = new DriveInfo(dirInfo.Root);
if (driveInfo.DriveType == DriveType.Network)
Console.WriteLine("Is a network drive!");
Funciona para rutas locales y rutas de red asignadas pero no para rutas UNC – Jamiec
Pruebe lo siguiente de 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:
Puede utilizar el método folowing a obtener la ruta UNC para una carpeta. No es exactamente lo que está 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;
}
Basado en @jgauffin y respuestas @ Daniel, podría intentar 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;
}
Esta es la única solución que cubre rutas de red asignadas y UNC. Suficientemente bueno para mi. – NielW
¿Usted está preguntando por rutas UNC? ¿Qué pasa con '\\ localhost \ something', o una unidad de red mapeada? – SLaks
posible duplicado de [Comprobar si la ruta está en la red] (http://stackoverflow.com/questions/2243569/check-if-path-is-on-network) –
Para ambos casos, rutas UNC y unidad de red asignada. – MyrR