2011-02-09 44 views
11

我想快速检查是否在完整路径中使用了连接点。我已经有了一个功能来测试像IsJunction()这样的文件夹,但也许有另一种解决方案不要在每个子文件夹上调用IsJunction()C#检测路径中的文件夹路口

所以我正在寻找一个功能,如HasJunctionsInPath(string path)而不测试每个文件夹的路径。

有什么可以做到这一点?

编辑:

或者更好的...

是否有可能解决路径中的所有路口得到一个文件或文件夹的真实位置?这将更好地解决我的问题,我仍然可以将结果与原始路径进行比较,以实现bool HasJunctionsInPath(string path)函数。

回答

2

据我所知在c#中没有开箱即用的实现来直接处理交汇点/重解析点。

所以你必须做一些interop与kernel32.dll。这有点棘手,但你找到样品。 您需要CreateFile()& DeviceIoControl()调用。

这里是一个很好的示例开始: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

有用的MSDN链接:

http://msdn.microsoft.com/en-us/library/cc232007%28PROT.13%29.aspx

http://msdn.microsoft.com/en-us/library/aa363858%28v=vs.85%29.aspx

http://msdn.microsoft.com/en-us/library/aa363216%28v=vs.85%29.aspx

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/7acd564f-0e9f-4295-8609-916af6675f0a

+0

看一看这个网站太:http://pinvoke.net/default.aspx/kernel32.DeviceIoControl它会帮助你获得签名。 – 2011-02-09 14:40:01