从C#中的路径中删除驱动器(或网络名称)

从C#中的绝对路径中删除驱动器名称,网络路径等最简洁(但最安全)的方法是什么?

例如,转换

\\networkmachine\foo\bar 

要么

 C:\foo\bar 

\foo\bar

关于路径问题似乎已经回答了很多问题,但我找不到我想要的东西。 我想到的第一个想法是使用Path.GetFullPath()来确保我确实使用绝对路径,然后只使用正则表达式来查找第一个不在另一个斜杠旁边的斜杠。 但是,使用正则表达式进行路径操作似乎有点危险。

获得驱动器号/目标网络机器/等,将字符串转换为Uri,并询问相对于驱动器/机器的路径,然后转换回字符串可能更明智吗? 还是有更好的方法?

使用

 string MyPath = @""; // \\networkmachine\foo\bar OR C:\foo\bar string MyPathWithoutDriveOrNetworkShare = MyPath.Substring (Path.GetPathRoot(MyPath).Length); 

C:\foo\bar结果是foo\bar\\networkmachine\foo\bar结果是bar

有关MSDN参考,请参阅http://msdn.microsoft.com/en-us/library/system.io.path.getpathroot.aspx

编辑 – 根据评论:

使用“string voodoo”(这不是简明恕我直言,因此不推荐)你可以这样做:

 if ( ( MyPath.IndexOf (":") == 1 ) || ( MyPath.IndexOf ( "\\\\" ) == 0 ) ) { MyPathWithoutDriveOrNetworkShare = MyPath.Substring (2); } if ( MyPathWithoutDriveOrNetworkShare.IndexOf ( "\\" ) > 0 ) MyPathWithoutDriveOrNetworkShare = MyPathWithoutDriveOrNetworkShare.Substring ( MyPathWithoutDriveOrNetworkShare.IndexOf ( "\\" ) ); 

你看过DirectoryInfo类了吗?

特别是DirectoryInfo.Parent和DirectoryInfo.Root可以帮助发现根目录,以便您可以从FullName中删除它

家长: http : //msdn.microsoft.com/en-us/library/system.io.directoryinfo.parent.aspx

Root: http : //msdn.microsoft.com/en-us/library/system.io.directoryinfo.root.aspx

我不知道安全性,但我个人把它放在一个字符串中,寻找一个包含(“\\”)或’:’并通过在它们周围进行子串解将它们从字符串中删除。

根据要求,我是这样做的:

我编写了一个帮助类PathHelper来完成我认为提问者想知道的事情。

您可以在CodeProject上找到该库 ,我将使用的函数是PathHelper.GetDriveOrShare ,其方式类似于:

 var s = @"C:\foo\bar"; var withoutRoot = s.Substring( PathHelper.GetDriveOrShare(s).Length );