从后面的符号链接中防止IO.GetDirectories()

时间:2011-04-25 06:10:17

标签: .net linux mono io symlink

在将.net应用程序移植到Linux上时,使用mono,我注意到它的IO.GetDirectories实现遵循Linux上的符号链接(当我的程序到达/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遵循符号链接的解决方法?

2 个答案:

答案 0 :(得分:5)

您可以检查File.GetAttributes,符号链接将具有ReparsePoint属性,我使用Windows符号链接和ubuntu 10.10进行了测试。

这不会阻止GetDirectories递归枚举,但你必须自己进行递归。

如果您不需要跨平台支持,可能需要查看Mono.Unix.UnixDirectoryInfo

答案 1 :(得分:0)

如果您将 Mono.Posix 的引用添加到项目中,则以下代码将测试路径是否指向符号链接:

Mono.Unix.UnixSymbolicLinkInfo i = new Mono.Unix.UnixSymbolicLinkInfo( path );
if( i.IsSymbolicLink ) ...

您还可以使用

测试其他文件类型(例如 Fifo 套接字 BlockDevice 等)
switch( i.FileType )