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

标签 c# mono

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

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

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

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

  • .代表当前目录
  • .. 表示父目录,即当前目录的上一级

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

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

最佳答案

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

关于c# - 是否有一种与系统无关的方法来确定表示当前目录级别和父目录级别的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52722655/

相关文章:

c# - 如何使用 Machine.Fakes (Moq) 模拟 Function<>?

c# - 位图插值c#

c# - 属性绑定(bind)没有响应

c# - 通过代码 session 工厂与 MySQL 设置 Nhibernate 映射

docker - 访问 Docker 容器内的共享库

c# - 可空引用类型 : "Try" method pattern, 在返回 false 时收到 null 警告

f# - 以编程方式启动 Mono 进程

c# - 可以单声道运行 framework.net 编译的应用程序(来自 VS 环境)

c# - 如何在 Xamarin 中正确更新 Gtk#?

c# - 我应该使用单声道来开发 linux 应用程序吗