检查目录是否是另一个路径的起点的最佳方法

时间:2014-03-26 03:58:07

标签: c# filesystems

我想知道如何实现以下内容:

Debug.Assert(PathStartsWith("C:\\dir1\\dir2\\dir3", "C:\\dir1") == true);
Debug.Assert(PathStartsWith("C:\\dir1\\dir2\\dir3", "C:\\dir2") == false);
Debug.Assert(PathStartsWith("C:\\dir1\\dir2\\dir3", "C:\\dir1\dir2") == true);

//not matching from start
Debug.Assert(PathStartsWith("C:\\dir1\\dir2\\dir3", "dir1") == false); 

//redundant slashes are ignored
Debug.Assert(PathStartsWith("C:\\dir1\\dir2\\dir3", "c:\\\\dir1") == true); 

我是否必须自己做(不会太难,但有很多情况需要检查,例如UNC路径,设备路径,网址等),或者有一些系统例程可以轻松完成?

1 个答案:

答案 0 :(得分:1)

我不相信BCL中有任何内置功能。如果您愿意使用p / invoke,那么shell提供了许多路径函数。

请参阅:PathIsSameRoot function

作为旁注,Win32路径函数都不能可靠地判断两条路径是否相等。为此,您需要基于Windows对象管理器命名空间创建某种规范路径,然后可能仍然考虑NTFS交接点,硬链接和软链接(可能还有更多)。

即使这样,你仍然会遇到网络共享UNC路径的问题,因为单个服务器可能有多个名称,没有通用的方法来协调它们。