在将.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
遵循符号链接的解决方法?
答案 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 )