【问题标题】:How to combine paths by preserving the original path's directory separator in C#?如何通过在 C# 中保留原始路径的目录分隔符来组合路径?
【发布时间】:2021-07-12 08:05:00
【问题描述】:

如果我们有/TestDir 作为示例路径,但我们在Windows 机器上,使用Path.JoinPath.CombineNextDir 将产生/TestDir\NextDir

有没有办法让它,如果我将它附加到的路径使用给定的分隔符 - 组合路径使用相同的分隔符? (Unix/Windows),即:

  • \TestDirNextDir 产生 \TestDir\NextDir
  • /TestDirNextDir 产生 /TestDir/NextDir

第一个目录将始终是根路径,这意味着它将始终包含要使用的路径分隔符。唯一的边缘情况是网络路径,因为它们总是以\\ 开头,但之后它们在 Unix/Windows 中会有所不同吗?如果我错了,请纠正我。

编辑:有人告诉我 : 是 Classic Mac 的路径分隔符 - 这是真的吗?我没有看到任何将其视为目录分隔符的 .NET API。

【问题讨论】:

  • UNC 路径在 Windows 中以双反斜杠开头。我认为它们也可以以双斜杠开头。
  • 无法自动执行此操作,您必须自己进行字符串操作。但是,为什么你首先想要一条带有错误斜线的路径呢?
  • 在 Windows 中,斜杠和反斜杠都被接受,因此为了跨平台兼容性,使用正斜杠可能是一个好主意。制作一个函数,在可以输入的任何地方替换“错误”的斜杠。
  • @BentTranberg 你知道哪些版本的 Windows 兼容吗?
  • 不,但多年来一直都是双向的,所以我猜你可以遇到任何 Windows 版本。

标签: c# .net-core path .net-5 path-separator


【解决方案1】:

这将采用它看到的第一个字符(/\),并将所有其他出现的 /\ 替换为它找到的第一个字符。

using System;

public class Example
{
   public static void Main()
   {
      char[] separators = { '\\', '/' };
      string path = "/TestDir\\NextDir\\AndTheNext/AndTheNext/AndTheNext\\AndTheNext";
      int index = path.IndexOfAny(separators);        
      path = path[index].ToString() == "\\" ? path.Replace('/', '\\') : path.Replace('\\', '/');
      Console.WriteLine(path);
   }
}

在此处查看运行情况:https://dotnetfiddle.net/fenzWO

【讨论】:

    【解决方案2】:

    Path 类使用名称为:PathSeparator 的字段,该字段取决于操作系统并且是只读的,因此更容易创建自己的类来执行与 Path 相同的操作,但您可以更改 PathSeparator 的值.

    有关 Path 的更多信息,您可以阅读文档:https://docs.microsoft.com/en-us/dotnet/api/system.io.path?view=net-5.0

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2011-06-03
      • 2015-04-16
      • 2014-01-16
      • 1970-01-01
      • 2011-02-23
      • 2017-10-12
      • 2021-10-11
      • 1970-01-01
      相关资源
      最近更新 更多