为什么不走这条路呢?结合工作

本文关键字:结合 工作 条路 不走 为什么 | 更新日期: 2023-09-27 18:04:18

我有以下命令:

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

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

contentFolder.FullName = "E:''"
然而

reportedContentFolderPath = "''ReportedContent''"

为什么Path.Combine切断了E:'?

为什么不走这条路呢?结合工作

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

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

来自文档:

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

在您的示例中,path2 确实包含根,因此返回时没有查看path1

在方法文档中有解释:

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

我建议你通读一遍,了解所有可能的组合是如何产生的:路径。结合方法

路径。如果第二个参数以分隔字符(')开头,则Combine将返回第二个参数。

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

From MSDN(强调我的):

public static string Combine(string path1, string path2)

[…]

返回值

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

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

看起来像Path。Combine认为两个斜杠E:''表示UNC路径,而UNC路径不应该以驱动器号作为前缀。将contentFolder更改为E:',它应该可以工作