C# 如何获取映射网络驱动器的共享路径

1. 映射一个网络驱动器:

 

映射一个网络驱动器

 

2. 完成映射后将在资源管理器中看到新增的盘符 Z

 

映射成功, Z 盘出现在资源管理器中

 

3. 使用下面的代码我们能很容易的获取到本地映射网络驱动器的网络路径。

 

[c-sharp] view plaincopy
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4. using System.Runtime.InteropServices;  
  5. using System.IO;  
  6. using System.Xml;  
  7. namespace PathingDemos  
  8. {  
  9.     class Program  
  10.     {  
  11.         static void Main(string[] args)  
  12.         {  
  13.             string path = Pathing.GetUNCPath(@"Z:/"); // path = @"//192.168.1.2/共享"  
  14.         }  
  15.     }  
  16.     public static class Pathing  
  17.     {  
  18.         [DllImport("mpr.dll", CharSet = CharSet.Unicode, SetLastError = true)]  
  19.         public static extern int WNetGetConnection(  
  20.             [MarshalAs(UnmanagedType.LPTStr)] string localName,  
  21.             [MarshalAs(UnmanagedType.LPTStr)] StringBuilder remoteName,  
  22.             ref int length);  
  23.         /// <summary>  
  24.         /// 给定一个路径,返回的网络路径或原始路径。   
  25.         /// 例如:给定路径 P:/2008年2月29日(P:为映射的网络驱动器名),可能会返回:“//networkserver/照片/2008年2月9日”  
  26.         /// </summary>  
  27.         /// <param name="originalPath">指定的路径</param>  
  28.         /// <returns>如果是本地路径,返回值与传入参数值一样;如果是本地映射的网络驱动器</returns>  
  29.         public static string GetUNCPath(string originalPath)  
  30.         {  
  31.             StringBuilder sb = new StringBuilder(512<mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/themes/advanced/langs/zh.js"></mce:script><mce:script type="text/javascript" src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js" mce_src="http://hi.images.csdn.net/js/blog/tiny_mce/plugins/syntaxhl/langs/zh.js"></mce:script>);  
  32.             int size = sb.Capacity;  
  33.             if (originalPath.Length > 2 && originalPath[1] == ':')  
  34.             {  
  35.                 char c = originalPath[0];  
  36.                 if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))  
  37.                 {  
  38.                     int error = WNetGetConnection(originalPath.Substring(0, 2),  
  39.                         sb, ref size);  
  40.                     if (error == 0)  
  41.                     {  
  42.                         DirectoryInfo dir = new DirectoryInfo(originalPath);  
  43.                         string path = Path.GetFullPath(originalPath)  
  44.                             .Substring(Path.GetPathRoot(originalPath).Length);  
  45.                         return Path.Combine(sb.ToString().TrimEnd(), path);  
  46.                     }  
  47.                 }  
  48.             }  
  49.             return originalPath;  
  50.         }  
  51.     }  
  52. }  
posted @ 2012-12-04 20:21  Net-Spider  阅读(3462)  评论(1)    收藏  举报