代码之家  ›  专栏  ›  技术社区  ›  F-H

是否有系统不可知的方法来确定表示当前和父目录级别的字符串?

  •  2
  • F-H  · 技术社区  · 7 年前

    运行C代码的不同环境对于文件和目录路径的外观有不同的约定/规则。

    一个常见的例子是分隔目录级别的字符。 在窗户上,它是 \ ,在Linux上,它是 / 以及其他(也是未来)系统可能遵循甚至不同的规则。

    因此,要创建健壮的代码,最好始终使用 Path.DirectorySeparatorChar (或者,当然,使用辅助方法,例如 Path.Combine )而不是硬编码特定的目录分隔符字符。

    现在,在各种系统上,有一些“伪目录名”可以在路径中使用:

    • . 表示当前目录
    • .. 表示父目录,即从当前目录向上一级

    虽然这些在Windows和Linux上恰好是相同的,但是其他环境(Mono可以实现在其上运行)可能在这里遵循不同的语法。

    我不想硬编码这些伪目录名。如何在运行时检索它们?

    1 回复  |  直到 7 年前
        1
  •  1
  •   adjan    7 年前

    我不认为这是个问题。 / 适用于Windows、Unix和Linux。同样适用于 .. . . 它也是 统一命名约定 用于网络路径。

    在Mono的实现中 Path . 是偶数 hardcoded . 如果底层框架能够避免硬编码,我看不出有什么意义。

    摘录:

    internal static void CheckSearchPattern(String searchPattern)
    {
        int index;
        while ((index = searchPattern.IndexOf("..", StringComparison.Ordinal)) != -1) {
    
            if (index + 2 == searchPattern.Length) // Terminal ".." . Files names cannot end in ".."
                throw new ArgumentException(Environment.GetResourceString("Arg_InvalidSearchPattern"));
    
            if ((searchPattern[index+2] ==  DirectorySeparatorChar)
                || (searchPattern[index+2] == AltDirectorySeparatorChar))
                throw new ArgumentException(Environment.GetResourceString("Arg_InvalidSearchPattern"));
    
            searchPattern = searchPattern.Substring(index + 2);
        }
    }