Path.Combine()在驱动器号后面不添加目录分隔符

时间:2013-11-11 14:41:43

标签: c# .net path

我是否正确使用Path.Combine方法?
我使用Path.Combine(string[])

获得此结果
C:Users\\Admin\\AppData\\Roaming\\TestProject\\Connections.xml

这是不太理想的代码所需的结果:由注释掉的代码生成的结果:

C:\\Users\\Admin\\AppData\\Roaming\\TestProject\\Connections.xml

请注意第一条路径中的驱动器号后面缺少\\

旧方法(手动添加反斜杠,注释掉)效果很好,但我很确定如果使用mono编译,它在Linux或其他东西下无效。

string[] TempSave = Application.UserAppDataPath.Split(Path.DirectorySeparatorChar);
string[] DesiredPath = new string[TempSave.Length - 2];
for (int i = 0; i < TempSave.Length - 2; i++)
{
    //SaveLocation += TempSave[i] + "\\";//This Works
    DesiredPath[i] = TempSave[i];
}
SaveLocation = Path.Combine(DesiredPath);//This Doesn't Work.    
ConnectionsFs = new FileStream(Path.Combine(SaveLocation,FileName)/*SaveLocation+FileName*/, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read);

基本上,我希望最终结果是TestProject目录,而不是项目本身或其版本。

1 个答案:

答案 0 :(得分:6)

它位于documentation

  

如果path1 是驱动器引用(即&#34; C:&#34;或&#34; D:&#34;)并且< strong> not 以有效的分隔符[..]结尾,DirectorySeparatorChar在连接之前附加到path1

因此,您的第一个路径(即驱动器号)不会附加目录分隔符。例如,您可以通过将分隔符附加到TempSave[0]来解决此问题,但这会导致Linux问题,就像您说的那样。

您也可以采用不同的方式解决实际问题,请参阅How do I find the parent directory in C#?,或者只添加@Dan建议的..\..\,以便您可以跳过拆分:

string desiredPath = Path.Combine(Application.UserAppDataPath, @"..\..\");