可以在其中运行C#代码的不同环境对于文件和目录路径的外观必须具有不同的约定/规则。
一个常见的示例是分隔目录级别的字符。
在Windows上是\
,在Linux上是/
,而其他(也是将来的)系统可能遵循甚至不同的规则。
因此,要创建健壮的代码,建议始终使用Path.DirectorySeparatorChar
(或当然使用Path.Combine
之类的辅助方法),而不要硬编码特定的目录分隔符。
现在,在各种系统上,可以在路径中使用一些“伪目录名称”:
.
代表当前目录..
代表父目录,即从当前目录向上一级尽管在Windows和Linux上它们恰好相同,但是其他环境(可以实现Mono的运行环境)在这里可能采用不同的语法。
我不想对这些伪目录名称进行硬编码。如何在运行时检索它们?
答案 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);
}
}