防止IO.GetDirectories()跟随符号链接

3
在将.NET应用程序移植到Linux时,使用mono,我注意到它对Linux的IO.GetDirectories的实现会遵循符号链接(当我的程序到达/home/clement/svn/obrowser/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib/tutorial/distrib时,问题变得明显)。
我在mono的网站上找不到任何关于这种行为的文档,也没有别的地方除了一个小小的论坛帖子。
你知道阻止IO.GetDirectories跟随符号链接的解决方法吗?

你有一个符号链接指向父目录吗? - Andrew T Finnell
@Andrew:我不会,但我的测试包括边角情况,而且我不能承受那种无限循环:/ - Clément
2个回答

5
你可以查看File.GetAttributes,符号链接将具有ReparsePoint属性,我在Windows符号链接和Ubuntu 10.10上进行了测试。
这不会阻止GetDirectories递归枚举,你需要自己递归处理。
如果您不需要跨平台支持,您可以考虑使用Mono.Unix.UnixDirectoryInfo

谢谢!根据我的研究,UnixDirectoryInfo始终将“IsSymLink”设置为false;要使用的命名空间似乎是Mono.Unix.UnixSymbolicLinkInfo。 - Clément
顺便提一下,有关我之前评论的详细信息,请参见http://lists.ximian.com/pipermail/mono-devel-list/2005-October/thread.html#15136。 - Clément
测试了更全面,效果非常好。谢谢! - Clément

0
如果您在项目中添加了对的引用,则以下代码将测试路径是否指向符号链接:
Mono.Unix.UnixSymbolicLinkInfo i = new Mono.Unix.UnixSymbolicLinkInfo( path );
if( i.IsSymbolicLink ) ...

你也可以使用以下代码测试其他文件类型(如FifoSocketBlockDevice等):

switch( i.FileType )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接