Directory.GetFiles 在任何平台上使用“/”

Directory.GetFiles with '/' on any platform

我正在尝试使用 Directory.GetFilesDirectory.GetDirectories 获取带有 '/' 字符的路径,而无需在每次生成字符串时替换该字符串。我会简单地要求图书馆使用 '/' 作为目录分隔符,即使我有一些宏告诉他在特定的 OS.

上使用 AltSeperator

不幸的是,这似乎不可能。

Path.DirectorySeparatorCharPath.AltDirectorySeparatorChar 取决于 OS 您的应用 运行 开启,并且是只读的。

According to the docs DirectorySeparatorChar 在 Windows 上是 \,在其他任何地方都是 /,并且 Path.AltDirectorySeparatorChar(目前)总是 /.

一般技术:

string MyPathCombine(string basename, string filename)
{
    int idx = basename.Length;
    if (idx == 0) return filename;
    if (basename[idx - 1] == '/') --idx;
    return filename;
}


IEnumerable<string> GetFilesSlash(string dirname)
    => Directory.GetFiles(dirname.Replace('/', Path.DirectorySeparatorCharacter)).Select((p) => MyPathCombine(dirname, Path.GetFileName(p));

如果您的所有路径都来自真实系统,那么这种更简单的形式会起作用,但如果有任何路径来自另一个系统,则不会,因为您可能会被 \ 字符毒害。然而,这并不是唯一的危险。从这里开始颠簸。

IEnumerable<string> GetFilesSlash(string dirname)
    => Directory.GetFiles(dirname.Replace('/', Path.DirectorySeparatorCharacter)).Select((p) => p.Replace(Path.DirectorySeparatorChar, '/'));