2016-05-23 14 views
2

我必须回来路径中的5个文件夹,然后我需要进一步输入3个文件夹并检查文件是否存在。立即在路径C中前后导航

让我们想象两个路径:

1) C:\a\b\c\d\e\f\g\ 

2) C:\a\2\3\4\5\test.xml 

然后我的程序,现在是第一个路径上。 我需要检查文件test.xml(第二个路径)是否存在。

为此,我知道方法File.Exists(路径),但是我有问题的路径。 我能够回来直到文件夹a并检查文件是否存在。 例如,以检查路径上的文件存在:

3) C:\a\test2.xml 

我可以使用:

File.Exists(@".\.\.\.\.\.\" + @"test2.xml"); 

但无论如何我尝试导航到第二路径(2)),并检查该文件存在我不能那样。有人可以帮我吗?提前致谢。问候。

+0

能否请你告诉你做了什么一些代码?有点不清楚你的问题到底是什么。您可能正在寻找['Path.GetDirectoryName()'](https://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname%28v=vs.110%29.aspx) –

+0

实际上这个过程没有任何代码。如果文件存在,我想使if()被输入 –

回答

2

。指当前目录 ..指当前

在您的例子以上的目录一层:

..\..\..\..\..\..\2\3\4\5\test.xml 

此向上移动到一个目录然后遍历至5,其中的文件驻留。

东西可能会有所帮助测试你的路径,并确保你在哪里,你觉得你是这样的:

string currentPath = Path.GetFullPath(relativePath); 

再检查currentPath的价值,如果它卷起的地方你没有想到你可以调试你的路径遍历而不是你的代码。

+0

现在,我已经与Path.Combine和Path.GetFullName方法调试此感谢您的时间和问候:) –

2

您只需要使用..来表示父目录。

尝试:

File.Exists(@"..\..\..\..\..\..\" + @"test2.xml"); 
+0

使用立即窗口: File.Exists(Path.Combine(@“.. \ .. \ .. \ .. \ ..”+ @“\ CoreCalc.dll“)); 给我错误,而File.Exists(Path.Combine(@“。\。。\ \ \” + @ “\ CoreCalc.dll”));给了我真正的 无论如何谢谢你的答复:) –

+0

@jankowalski:看什么'Path.Combine'回报你其实只是。越来越'\ CoreCalc.dll'。 – SLaks

+0

该代码将使用可执行文件在运行目录下找到的路径。您可能需要承担其在斌/调试运行,这样上去了额外的两个目录。 –

0

我仍然不能因声誉有关的问题发表意见,但我相信你的问题是两者之一:

  1. 要么前往C:\a\b\c\d\e\f\g\test2.xml,在这种情况下,你可能想使用Path.Combine("C:\a\", "\2\3\4\5\", "test2.xml")
  2. 要么移动升后降,那么这将是

    DirectoryInfo dinfo = new DirectoryInfo(path); 
    if (dinfo.Exists){ 
        for (int i = 0; i<5; i++){ 
         dinfo = dinfo.Parent; 
        } 
        if(File.Exists(Path.Combine(dinfo.FullName, "test2.xml")){ 
         // do something 
        } 
    }