C# 将Environment.CurrentDirectory与反向路径连接
如果我有以下目录结构: Project1/bin/debugC# 将Environment.CurrentDirectory与反向路径连接,c#,path,C#,Path,如果我有以下目录结构: Project1/bin/debug Project2/xml/file.xml 我试图从Project1/bin/debug目录中引用file.xml 我基本上是在做以下工作: string path = Environment.CurrentDirectory + @"..\..\Project2\xml\File.xml": 正确的语法是什么?使用: System.IO.Path.GetFullPath(@"..\..\Project2\xml\File.xml"
Project2/xml/file.xml 我试图从Project1/bin/debug目录中引用file.xml 我基本上是在做以下工作:
string path = Environment.CurrentDirectory + @"..\..\Project2\xml\File.xml":
正确的语法是什么?使用:
System.IO.Path.GetFullPath(@"..\..\Project2\xml\File.xml")
最好将路径组件作为路径组件来操作,而不是字符串:
string path = System.IO.Path.Combine(Environment.CurrentDirectory,
@"..\..\..\Project2\xml\File.xml");
一个“.”带你去垃圾箱
下一步“.”带您进入项目1
下一步“.”带您到Project1的父级
然后转到文件请注意,使用Path.Combine()可能不会得到预期的结果,例如:
string path = System.IO.Path.Combine(@"c:\dir1\dir2",
@"..\..\Project2\xml\File.xml");
这将产生以下字符串:
@"c:\dir1\dir2\dir3\..\..\Project2\xml\File.xml"
如果您希望路径为“c:\dir1\Project2\xml\File.xml”,则可以使用类似于此的方法,而不是path.Combine():
这将转换为..\Project1\bin\debug\..\Project2\。。。如果您考虑“.”只吃路径中的前一个目录,您会得到..\Project1\Project2\…足够正确。我没有数ak的..我想是因为缺少领先的“\”才让他们这么做的。会修改的。对我也有用。事实上,我更喜欢@lubos版本,但文件路径正确。但是“.\”不是在relativePath的开头,怎么样?这仍然是一条有效的路径。我更喜欢使用System.IO.Path.GetFullPath将相对路径转换为绝对路径。或者也可以选择使用DirectoryInfo和FileInfo类。
@"c:\dir1\dir2\dir3\..\..\Project2\xml\File.xml"
public static string CombinePaths(string rootPath, string relativePath)
{
DirectoryInfo dir = new DirectoryInfo(rootPath);
while (relativePath.StartsWith("..\\"))
{
dir = dir.Parent;
relativePath = relativePath.Substring(3);
}
return Path.Combine(dir.FullName, relativePath);
}