我想知道如何实现以下内容:
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路径,设备路径,网址等),或者有一些系统例程可以轻松完成?
答案 0 :(得分:1)
我不相信BCL中有任何内置功能。如果您愿意使用p / invoke,那么shell提供了许多路径函数。
作为旁注,Win32路径函数都不能可靠地判断两条路径是否相等。为此,您需要基于Windows对象管理器命名空间创建某种规范路径,然后可能仍然考虑NTFS交接点,硬链接和软链接(可能还有更多)。
即使这样,你仍然会遇到网络共享UNC路径的问题,因为单个服务器可能有多个名称,没有通用的方法来协调它们。