Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将Environment.CurrentDirectory与反向路径连接_C#_Path - Fatal编程技术网

C# 将Environment.CurrentDirectory与反向路径连接

C# 将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"

如果我有以下目录结构:

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")

最好将路径组件作为路径组件来操作,而不是字符串:

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);
}