将路径拆分为“";在C#中

本文关键字:quot 路径 拆分 | 更新日期: 2023-09-27 18:00:34

如何通过"''"分割路径?如果我使用,它会给我一个语法错误

path.split("''");

将路径拆分为“";在C#中

您应该使用

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文件系统路径,这对你没有帮助。换句话说,这取决于您的上下文:)

另一种选择是使用PathDirectoryInfo上的方法,以更敏感的文件系统方式获取有关路径的信息。

为了安全起见,您可以使用:

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[]{'/',''''});

尽管这会起作用,但它有各种缺点:

  1. 它不允许您的应用程序适应各种目标平台。目前,我们的应用程序基本上运行在UNIX和Windows操作系统(Win、macOS、iOS、linux变体)上。因此存在一组固定的路径字符。但当dotNET移植到其他操作系统时,这种情况可能会改变。因此,最好使用预定义的常量
  2. 内联语法的性能较差。这可能对少数文件不感兴趣,但当处理数百万个文件时,会有明显的差异。托管内存将一直上升到下一次GC。当查看生成的汇编代码时;调用CORINFO_HELP_NEWARR_;对于每个"new"语句,即使在Release模式下也是如此。每当您新建任何数组时,都会发生这种情况,因为数组不是不可变的。我提出的解决方案通过将数组声明为只读和静态来防止这种情况
  3. 内联语法的可重用性也更差,因为您可能希望在其他上下文中使用路径分隔符数组
  4. StringSplitOptions.RemoveEmptyEntries应用于说明UNC路径和传入路径中可能的键入错误。操作系统不允许重复的路径分隔符,但可能存在用户输入错误或路径分隔符字符的重复串联,例如在连接路径和文件名时