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

Uto*_*Ltd 23 .net c# path

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

例如,转换

\\networkmachine\foo\bar
Run Code Online (Sandbox Code Playgroud)

要么

C:\foo\bar
Run Code Online (Sandbox Code Playgroud)

\foo\bar.

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

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

Yah*_*hia 33

使用

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

结果对于C:\foo\barfoo\bar\\networkmachine\foo\barbar.

有关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 ( "\\" ) );  
Run Code Online (Sandbox Code Playgroud)

  • 但是这不会给出他在上面的网络路径示例中要求的路径,因为在这种情况下GetPathRoot将返回\\networkmachine\foo. (7认同)