Eine Möglichkeit wäre, System.IO.Directory.GetParent () einige Male auszuführen. Gibt es eine elegantere Möglichkeit, ein paar Ordner von dem Ort aus zu verschieben, an dem sich die ausführende Assembly befindet?
Ich versuche, eine Textdatei zu finden, die sich in einem Ordner über dem Anwendungsordner befindet. Die Assembly selbst befindet sich jedoch im Bin, der sich einige Ordner tief im Anwendungsordner befindet.
c#
.net
console-application
Entwickler747
quelle
quelle
Directory.SetCurrentDirectory(@"..\..\..\..");
Antworten:
Ein anderer einfacher Weg ist dies zu tun:
Hinweis Dies geht zwei Stufen höher. Das Ergebnis wäre:
newPath = @"C:\Folder1\Folder2\";
quelle
Path.Combine
Backslash manuell hinzuzufügen. Erwägen SiePath.Combine(path, "..", "..")
stattdessen die Verwendung .Wenn c: \ folder1 \ folder2 \ folder3 \ bin der Pfad ist, gibt der folgende Code den Pfadbasisordner des bin-Ordners zurück
dh c: \ Ordner1 \ Ordner2 \ Ordner3
Wenn Sie den Ordner2-Pfad möchten, können Sie das Verzeichnis über abrufen
Dann erhalten Sie den Pfad als c: \ Ordner1 \ Ordner2 \
quelle
Sie können verwenden
..\path
, um eine Ebene nach oben..\..\path
zu gehen, um zwei Ebenen vom Pfad nach oben zu gehen.Sie können auch
Path
Klasse verwenden.C # -Pfadklasse
quelle
Das hat bei mir am besten funktioniert:
string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));
Den 'richtigen' Pfad zu finden war nicht das Problem, das Hinzufügen von '../' macht das natürlich, aber danach kann die angegebene Zeichenfolge nicht mehr verwendet werden, da am Ende nur das '../' hinzugefügt wird. Wenn Sie es mit umgeben
Path.GetFullPath()
, erhalten Sie den absoluten Pfad, der es nutzbar macht.quelle
Die folgende Methode durchsucht eine Datei, die mit dem Startpfad der Anwendung beginnt (Ordner * .exe). Wird die Datei dort nicht gefunden, werden die übergeordneten Ordner durchsucht, bis entweder die Datei gefunden oder der Stammordner erreicht wurde.
null
wird zurückgegeben, wenn die Datei nicht gefunden wurde.Hinweis:
Application.StartupPath
Wird normalerweise in WinForms-Anwendungen verwendet, funktioniert aber auch in Konsolenanwendungen. Sie müssen jedoch einen Verweis auf dieSystem.Windows.Forms
Baugruppe festlegen . Sie können ersetzenApplication.StartupPath
durch ,Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
wenn Sie es vorziehen.quelle
Vielleicht könnten Sie eine Funktion verwenden, wenn Sie die Anzahl der Ebenen deklarieren und in eine Funktion einfügen möchten?
Und man könnte es so nennen:
quelle
C #
quelle
das kann helfen
quelle
Ich habe einige virtuelle Verzeichnisse und kann keine Verzeichnismethoden verwenden. Also habe ich eine einfache Split / Join-Funktion für Interessierte erstellt. Nicht so sicher.
Also, wenn Sie 4 bis verschieben möchten, müssen Sie nur die Änderungen
1
zu4
und einige Prüfungen zu vermeiden Ausnahmen hinzufügen.quelle
Wenn Sie den Ordner kennen, zu dem Sie navigieren möchten, suchen Sie den Index und dann den Teilstring.
quelle
a
? Was ist, wenn der Pfad so aussiehtC:\Folderame3\Folderame2\Folderame\...
?