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

时间:2018-10-09 13:46:55

标签: c# mono

可以在其中运行C#代码的不同环境对于文件和目录路径的外观必须具有不同的约定/规则。

一个常见的示例是分隔目录级别的字符。 在Windows上是\,在Linux上是/,而其他(也是将来的)系统可能遵循甚至不同的规则。

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

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

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

尽管在Windows和Linux上它们恰好相同,但是其他环境(可以实现Mono的运行环境)在这里可能采用不同的语法。

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

1 个答案:

答案 0 :(得分:1)

我认为这不是问题。 /适用于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);
    }
}