2016-05-23 5 views
2

Ich muss 5 Ordner im Pfad zurückkommen, dann muss ich 3 Ordner weiter eingeben und prüfen, ob die Datei existiert.In Pfad C vor- und rückwärts navigieren #

Lets zwei Wege vorstellen:

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

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

Dann jetzt mein Programm auf dem ersten Weg ist. Ich muss überprüfen, ob die Datei test.xml (auf dem zweiten Pfad) existiert.

Dafür kenne ich Methode File.Exists (Pfad), aber ich habe Probleme mit dem Pfad. Ich kann bis zum Ordner a zurückkommen und prüfen, ob die Datei da ist. Zum Beispiel zu überprüfen, ob die Datei auf dem Pfad vorhanden ist:

3) C:\a\test2.xml 

ich verwenden:

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

aber dennoch auf dem zweiten Weg zu navigieren meine Versuche, (2)) und prüfen, ob diese Datei vorhanden ist Das kann ich nicht. Darf mir da jemand helfen? Danke im Voraus. Grüße.

+0

können Sie bitte etwas Code von zeigen, was du getan hast? Es ist ein wenig unklar, was genau dein Problem ist. Möglicherweise suchen Sie nach ['Path.GetDirectoryName()'] (https://msdn.microsoft.com/en-us/library/system.io.path.getdirectoryname%28v=vs.110%29.aspx) –

+0

Eigentlich gibt es keinen Code um diesen Prozess. Ich möchte If() eingeben, das eingegeben wird, wenn die Datei existiert –

Antwort

2

. bezieht sich auf das aktuelle Verzeichnis .. bezieht sich auf das Verzeichnis eine Ebene über dem aktuellen

In Ihrem Beispiel:

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

Dieser bewegt sich dann in die ein Verzeichnis nach oben durchläuft bis zu 5, wo Ihre Datei befindet.

Etwas, das hilfreich sein könnte, Ihren Weg zu testen und sicherzustellen, dass Sie sind, wo Sie denken, Sie sind, ist dies:

string currentPath = Path.GetFullPath(relativePath); 

Und dann den Wert der Strompfad überprüfen, ob es irgendwo aufwickelt Sie hatte nicht erwartet, Sie können Ihr Pfad-Traversal und nicht Ihren Code debuggen.

+0

Jetzt habe ich dies mit Path.Combine und Path.GetFullName Methoden zu debuggen. Vielen Dank für die Zeit und Grüße :) –

2

Sie müssen nur .. verwenden, um ein übergeordnetes Verzeichnis anzugeben.

Versuchen:

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

Verwenden von sofortiges Fenster: File.Exists (Path.Combine (@ ".. \ .. \ .. \ .. \ .." + @ "\ CoreCalc.dll ")); gibt mich falsch, während File.Exists (Path.Combine (@ ". \.\. \. \. "+ @" \ CoreCalc.dll ")); gibt mir die Wahrheit. Wie auch immer, danke für die Antwort :) –

+0

@jankowalski: Sehen Sie, was' Path.Combine' zurückgibt. Sie sind eigentlich nur "\ CoreCalc.dll". – SLaks

+0

Dieser Code wird das Verzeichnis, in dem die ausführbare Datei ausgeführt wird, verwenden, um den Pfad zu finden. Möglicherweise müssen Sie davon ausgehen, dass er in bin/Debug ausgeführt wird. Gehen Sie also zwei zusätzliche Verzeichnisse nach oben. –

0

Ich kann immer noch nicht aufgrund Ruf bezogenen Kommentar Probleme, aber ich glaube, das Problem einer von beiden:

  1. entweder zu C:\a\b\c\d\e\f\g\test2.xml bekommen, in welchem ​​Fall Sie Path.Combine("C:\a\", "\2\3\4\5\", "test2.xml")
  2. entweder verwenden möchten bewegt, dann wäre es nach oben und dann nach unten, sein

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