防止IO.GetDirectories()从符号链接

在将.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的网站上找不到关于这种行为的任何文档,除了一个微小的论坛post以外的任何地方。

你知道一个解决方法,以防止IO.GetDirectories符号链接?

你可以检查File.GetAttributes ,符号链接将具有ReparsePoint属性,我测试了这个与Windows符号链接,并在Ubuntu 10.10。

这不会阻止GetDirectories递归枚举虽然,你将不得不做你自己的递归。

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

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

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

您也可以使用其他文件类型(如FifoSocketBlockDevice等)进行测试

 switch( i.FileType )