将路径拆分为“";在C#中
本文关键字:quot 路径 拆分 | 更新日期: 2023-09-27 18:00:34
如何通过"''"
分割路径?如果我使用,它会给我一个语法错误
path.split("''");
您应该使用
path.Split(Path.DirectorySeparatorChar);
如果您试图基于本机路径分隔符拆分文件路径。
尝试path.Split('''')
-so单引号(用于字符)
要使用这样的字符串:
path.Split(new[] {"''"}, StringSplitOptions.None)
要使用字符串,必须指定一个字符串数组。我从来没有弄清楚为什么:)
没有采用字符串的string.Split
重载。(另外,C#区分大小写,因此需要Split
而不是split
)。但是,您可以使用:
string bits = path.Split('''');
其将使用采用CCD_ 6参数的过载。它相当于:
string bits = path.Split(new char[] { '''' });
这是假设你肯定想用反斜杠分割。您可能希望通过运行的操作系统的目录分隔符进行拆分,在这种情况下,Path.DirectorySeparatorChar
可能是正确的方法。。。在Unix上为CCD_ 8,在Windows上为CCD_。另一方面,如果你试图在Unix上运行的ASP.NET页面中解析Windows文件系统路径,这对你没有帮助。换句话说,这取决于您的上下文:)
另一种选择是使用Path
和DirectoryInfo
上的方法,以更敏感的文件系统方式获取有关路径的信息。
为了安全起见,您可以使用:
path.Split(new[] { Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar });
在windows上,至少在windows 7/XP中,在C#路径函数和命令行中也可以使用正斜杠。
例如:这两者对我来说产生了相同的结果:
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[] { ''''' });
最好只使用现有的类System.IO.Path,这样就不需要关心任何系统规范。
它提供了访问文件路径的任何部分的方法,如GetFileName(字符串路径)等。
完整的解决方案可能如下所示:
//
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 );
}
本文中提出的其他一些解决方案使用以下语法:路径拆分(new char[]{'/',''''});
尽管这会起作用,但它有各种缺点:
- 它不允许您的应用程序适应各种目标平台。目前,我们的应用程序基本上运行在UNIX和Windows操作系统(Win、macOS、iOS、linux变体)上。因此存在一组固定的路径字符。但当dotNET移植到其他操作系统时,这种情况可能会改变。因此,最好使用预定义的常量
- 内联语法的性能较差。这可能对少数文件不感兴趣,但当处理数百万个文件时,会有明显的差异。托管内存将一直上升到下一次GC。当查看生成的汇编代码时;调用CORINFO_HELP_NEWARR_;对于每个"new"语句,即使在Release模式下也是如此。每当您新建任何数组时,都会发生这种情况,因为数组不是不可变的。我提出的解决方案通过将数组声明为只读和静态来防止这种情况
- 内联语法的可重用性也更差,因为您可能希望在其他上下文中使用路径分隔符数组
- StringSplitOptions.RemoveEmptyEntries应用于说明UNC路径和传入路径中可能的键入错误。操作系统不允许重复的路径分隔符,但可能存在用户输入错误或路径分隔符字符的重复串联,例如在连接路径和文件名时