2011-08-10 28 views
6

使用C#,我想我的應用程序返回一個文件夾(具有已知路徑)是否位於網絡或我的電腦。使用C#,如何知道一個文件夾是否位於網絡

我該怎麼做?

+1

你問UNC路徑?怎麼樣'\\ localhost \ something',或映射的網絡驅動器? – SLaks

+3

[檢查路徑是否在網絡上]的可能的重複(http://stackoverflow.com/questions/2243569/check-if-path-is-on-network) –

+0

對於這兩種情況,UNC路徑和映射的網絡驅動器。 – MyrR

回答

6

如果你是在談論一個映射的網絡驅動器,你可以使用DriveInfoDriveType property

var driveInfo = new DriveInfo("S:\"); 
if(driveInfo.DriveType == DriveType.Network) 
    // do something 
0
var dirInfo = new DirectoryInfo(yourPath); 
var driveInfo = new DriveInfo(dirInfo.Root); 
if (driveInfo.DriveType == DriveType.Network) 
    Console.WriteLine("Is a network drive!"); 
+0

適用於本地路徑和映射網絡路徑,但不適用於UNC路徑 – Jamiec

0

嘗試從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); 
    } 
} 

事情需要考慮:

  • 路徑乞求帶有兩個反斜槓字符(\)被解釋爲通用命名約定(UNC)路徑。
  • 以字母后跟冒號(:)開頭的路徑將被解釋爲已裝入的網絡驅動器。但是,PathIsNetworkPath無法通過Microsoft MS-DOS SUBST命令或DefineDosDevice函數識別映射到驅動器號的網絡驅動器
0

可以使用下列方法獲取文件夾的UNC路徑。您正在尋找不正是對,但基於@jgauffin和@Daniel答案可能是有用的

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; 
    } 
3

,你可以試試這個小黑客:

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; 
} 
+0

這是涵蓋UNC和映射網絡路徑的唯一解決方案。對我來說足夠了。 – NielW

相關問題