【问题标题】:Why won't this Path.Combine work? [duplicate]为什么这个 Path.Combine 不起作用? [复制]
【发布时间】:2011-08-03 15:43:29
【问题描述】:

我有以下命令:

string reportedContentFolderPath =
Path.Combine(contentFolder.FullName.ToString(), @"\ReportedContent\");

当我查看调试器时,我可以看到以下内容:

contentFolder.FullName = "E:\\"

然而

reportedContentFolderPath = "\\ReportedContent\\"

为什么Path.Combine 会砍掉 E:\?

【问题讨论】:

标签: c# io


【解决方案1】:

@"\ReportedContent\" 上有一个斜线。你不想要那个(或者后面的,我怀疑) - 试试吧:

string reportedContentFolderPath =
    Path.Combine(contentFolder.FullName.ToString(), "ReportedContent");

来自the documentation

如果path2 不包含根(例如,如果path2 不以分隔符或驱动器规范开头),则结果是两个路径的连接,中间有分隔符。如果path2 包含根,则返回path2

在您的情况下,path2 确实包含一个根,因此它在没有查看 path1 的情况下被返回。

【讨论】:

    【解决方案2】:

    Path.Combine 将返回以分隔符 (\) 开头的第二个参数。

    【讨论】:

      【解决方案3】:

      方法文档中有说明:

      如果 path2 不包含根(例如,如果 path2 不以分隔符或驱动器规范开头),则结果是两个路径的连接,中间有分隔符。如果 path2 包含根,则返回 path2。

      我建议您阅读所有内容以了解所有可能的组合如何发挥作用:Path.Combine Method

      【讨论】:

        【解决方案4】:

        我敢打赌,通过在第二个字符串中指定斜杠作为前缀,Combine 方法假定当前驱动器。尝试删除斜线。

        【讨论】:

          【解决方案5】:

          看起来 Path.Combine 认为两个斜杠 E:\\ 指的是 UNC 路径,并且 UNC 路径不应以驱动器号为前缀。将 contentFolder 更改为 E:\,它应该可以工作。

          【讨论】:

            【解决方案6】:

            来自MSDN(强调我的):

            public static string Combine(string path1, string path2)
            

            [...]

            返回值

            类型:System.String 组合路径。如果指定路径之一是零长度字符串,则此方法返回另一个路径。 如果path2 包含绝对路径,则此方法返回path2

            @"\ReportedContent\" 是绝对路径,因为它以反斜杠开头。

            【讨论】:

              猜你喜欢
              • 2015-06-10
              • 2015-11-14
              • 2011-03-10
              • 2016-01-13
              • 2016-08-18
              • 2012-12-24
              • 2013-04-04
              • 1970-01-01
              相关资源
              最近更新 更多