使用c#,如何知道一个文件夹是否位于网络上
本文关键字:是否 于网络 网络 文件夹 一个 何知道 使用 | 更新日期: 2023-09-27 18:04:57
使用c#,我希望我的应用程序返回文件夹(具有已知路径)是否位于网络中或在我的计算机中。
我该怎么做呢?
如果您谈论的是映射的网络驱动器,您可以使用DriveInfo
的DriveType
属性:
var driveInfo = new DriveInfo("S:'");
if(driveInfo.DriveType == DriveType.Network)
// do something
另一个SO问题的原始答案,检查路径是否在网络上
使用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"));
}
}
根据@jgauffin和@Daniel的回答,你可以试试这个小技巧:
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;
}
var dirInfo = new DirectoryInfo(yourPath);
var driveInfo = new DriveInfo(dirInfo.Root);
if (driveInfo.DriveType == DriveType.Network)
Console.WriteLine("Is a network drive!");
您可以使用以下方法获取文件夹的UNC路径。不完全是你要找的,但可能有用
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;
}
从Shell轻量级实用程序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);
}
}
注意事项:
- 以两个反斜杠字符(')开头的路径被解释为通用命名约定(UNC)路径。
- 以字母开头,后跟冒号(:)的路径被解释为挂载的网络驱动器。但是,PathIsNetworkPath不能识别通过Microsoft MS-DOS SUBST命令或DefineDosDevice函数 映射到驱动器号的网络驱动器。