2011-04-25 74 views
3

当使用mono将一个.net应用程序移植到Linux时,我注意到它的实现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时变得明显)。从符号链接中防止IO.GetDirectories()

我在mono的网站上找不到关于这种行为的任何文档,除了一个微小的论坛帖子外,没有任何其他文档。

你知道一个避免IO.GetDirectories符号链接的解决方法吗?

+0

你有一个符号那点插座BlockDevice等)到父目录? – 2011-04-25 11:48:25

+0

@Andrew:我没有,但我的测试确实包含了角落案例,而且我买不起这种无限循环:/ – 2011-04-25 14:10:56

回答

5

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

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

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

+0

+1,谢谢!对于参考,我的研究似乎表明UnixDirectoryInfo总是将'IsSymLink'设置为false;要使用的名称空间似乎是Mono.Unix.UnixSymbolicLinkInfo。 – 2011-04-25 14:24:45

+0

有关我之前评论的详细信息,请参阅http://lists.ximian.com/pipermail/mono-devel-list/2005-October/thread.html#15136。 – 2011-04-25 14:29:40

+0

测试更全面,它效果很好。谢谢! – 2011-04-27 12:59:29

0

如果Mono.Posix到添加到您的项目的引用,然后将下面的代码将测试如果路径指向符号链接:

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

您还可以测试其他文件类型(像先进先出,使用

switch(i.FileType)