在将.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 ) ...
您也可以使用其他文件类型(如Fifo , Socket , BlockDevice等)进行测试
switch( i.FileType )