【发布时间】:2011-06-25 11:35:49
【问题描述】:
如何通过"\\" 分割路径?如果我使用它会给我一个语法错误
path.split("\\");
【问题讨论】:
如何通过"\\" 分割路径?如果我使用它会给我一个语法错误
path.split("\\");
【问题讨论】:
你应该使用
path.Split(Path.DirectorySeparatorChar);
如果您尝试根据本机路径分隔符拆分文件路径。
【讨论】:
试试path.Split('\\') --- 所以单引号(用于字符)
要使用这样的字符串:
path.Split(new[] {"\\"}, StringSplitOptions.None)
要使用字符串,您必须指定一个字符串数组。我从来不明白为什么:)
【讨论】:
没有采用字符串的string.Split 重载。 (此外,C# 区分大小写,因此您需要 Split 而不是 split)。但是,您可以使用:
string bits = path.Split('\\');
这将使用带有params char[] 参数的重载。相当于:
string bits = path.Split(new char[] { '\\' });
假设你肯定想用反斜杠分割。您可能希望按您正在运行的操作系统的目录分隔符进行拆分,在这种情况下,Path.DirectorySeparatorChar 可能是正确的方法......它将是 Unix 上的 / 和\ 在 Windows 上。另一方面,如果您试图解析在 Unix 上运行的 ASP.NET 页面中的 Windows 文件系统路径,那将无济于事。换句话说,这取决于您的上下文:)
另一种选择是使用Path 和DirectoryInfo 上的方法以对文件系统更敏感的方式获取有关路径的信息。
【讨论】:
为了安全起见,您可以使用:
path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar });
【讨论】:
在 Windows 上,在 C# Path 函数和命令行中,至少在 Windows 7/XP 中也接受使用正斜杠。
例如: 这两个对我产生相同的结果:
dir "C:/Python33/Lib/xml"
dir "C:\Python33\Lib\xml"
(In C:)
dir "Python33/Lib/xml"
dir "Python33\Lib\xml"
在 Windows 上,'/' 或 '\' 都不是文件名的有效字符。在 Linux 上,文件名中的 '\' 是可以的,因此如果同时解析两者,您应该注意这一点。
因此,如果您想支持两种形式的路径(就像我一样),您可以这样做:
path.Split(new char[] {'/', '\\'});
在 Linux 上,使用 Path.DirectorySeparatorChar 可能更安全。
【讨论】:
Path.Split(new char[] { '\\\' });
【讨论】:
一个完整的解决方案可能如下所示:
//
private static readonly char[] pathSeps = new char[] {
Path.DirectorySeparatorChar,
Path.AltDirectorySeparatorChar,
Path.VolumeSeparatorChar,
};
//
///<summary>Split a path according to the file system rules.</summary>
public static string[] SplitPath( string path ) {
if ( null == path ) return null;
return path.Split( pathSeps, StringSplitOptions.RemoveEmptyEntries );
}
本文中提出的其他一些解决方案使用以下语法: path.Split(new char[] {'/', '\'});
虽然这可行,但它有各种缺点:
【讨论】: