Directory.GetFiles 在任何平台上使用“/”
Directory.GetFiles with '/' on any platform
我正在尝试使用 Directory.GetFiles
或 Directory.GetDirectories
获取带有 '/'
字符的路径,而无需在每次生成字符串时替换该字符串。我会简单地要求图书馆使用 '/'
作为目录分隔符,即使我有一些宏告诉他在特定的 OS.
上使用 AltSeperator
不幸的是,这似乎不可能。
Path.DirectorySeparatorChar
和 Path.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, '/'));
我正在尝试使用 Directory.GetFiles
或 Directory.GetDirectories
获取带有 '/'
字符的路径,而无需在每次生成字符串时替换该字符串。我会简单地要求图书馆使用 '/'
作为目录分隔符,即使我有一些宏告诉他在特定的 OS.
不幸的是,这似乎不可能。
Path.DirectorySeparatorChar
和 Path.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, '/'));