【问题标题】:Prevent IO.GetDirectories() from following symlinks防止 IO.GetDirectories() 跟随符号链接
【发布时间】:2011-04-25 06:10:16
【问题描述】:

在使用 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 时问题变得很明显)。

我在 mono 的网站上找不到任何关于此行为的文档,除了一个很小的论坛帖子之外,在任何地方都找不到。

您知道防止IO.GetDirectories 跟踪符号链接的解决方法吗?

【问题讨论】:

  • 你有一个指向父目录的符号链接?
  • @Andrew:我没有,但我的测试确实包括极端情况,我无法承受那种无限循环:/

标签: .net linux mono io symlink


【解决方案1】:

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

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

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

【讨论】:

  • +1,谢谢!作为参考,我的研究似乎表明 UnixDirectoryInfo 始终将 IsSymLink 设置为 false;要使用的命名空间似乎是 Mono.Unix.UnixSymbolicLinkInfo。
  • 请参阅lists.ximian.com/pipermail/mono-devel-list/2005-October/… 了解我之前评论的详细信息,顺便说一句。
  • 对此进行了更全面的测试,效果很好。谢谢!
【解决方案2】:

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

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

您还可以使用

测试其他文件类型(如 FifoSocketBlockDevice 等)
switch( i.FileType )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 2022-01-23
    • 2011-06-26
    • 2013-03-10
    相关资源
    最近更新 更多