我是否正确使用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
目录,而不是项目本身或其版本。
答案 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, @"..\..\");