我该如何用"\\"
拆分路径?如果我使用"\"
,它会给我一个语法错误。
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 });
dir "C:/Python33/Lib/xml"
dir "C:\Python33\Lib\xml"
(In C:)
dir "Python33/Lib/xml"
dir "Python33\Lib\xml"
path.Split(new char[] {'/', '\\'});
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[] {'/', '\'});
虽然这样做可以起到作用,但它有各种缺点:
1. 它不允许您的应用程序适应各种目标平台。当前,我们的应用程序基本上在UNIX和Windows操作系统(Win、macOS、iOS、Linux变体)上运行。因此,有一组固定的路径字符。但是,当dotNET被移植到其他操作系统时,这可能会改变。因此最好使用预定义的常量。 2. 内联语法的性能较差。这对于少数文件可能没有兴趣,但处理数百万个文件时会有明显的差异。托管内存将增加直到下一个GC。查看生成的汇编代码时,您会发现每个“new”语句都会调用“CORINFO_HELP_NEWARR_1_VC”,即使在发布模式下也是如此。这是因为数组不是不可变的,所以无论何时都会创建新的数组。我的解决方案是通过将数组声明为只读和静态来防止这种情况发生。 3. 内联语法的可重用性也较差,因为您可能想在其他上下文中使用路径分隔符数组。 4. 应该使用StringSplitOptions.RemoveEmptyEntries来处理UNC路径和传入路径中可能存在的拼写错误。操作系统不允许重复的路径分隔符,但用户可能会出现打字错误或重复连接路径分隔符字符的情况,例如在连接路径和文件名时。
\\
,只是可视化表示不同。当默认系统区域设置为日语或韩语时,系统将显示U+005C代码点的Yen或Won符号。很糟糕,但这是事实。 - Chris Taylor