wake-up-neo.com

Wie navigiere ich durch einige Ordner?

Eine Möglichkeit wäre, System.IO.Directory.GetParent () einige Male auszuführen. Gibt es eine anmutigere Art, einige Ordner hinauf zu reisen, wo sich die ausführende Assembly befindet?

Ich versuche, eine Textdatei zu finden, die sich über dem Anwendungsordner in einem Ordner befindet. Die Assembly selbst befindet sich jedoch in der Bin, die sich einige Ordner tief im Anwendungsordner befindet.

80
developer747

Ein anderer einfacher Weg ist dies zu tun:

string path = @"C:\Folder1\Folder2\Folder3\Folder4";
string newPath = Path.GetFullPath(Path.Combine(path, @"..\..\"));

Hinweis Dies geht zwei Stufen höher. Das Ergebnis wäre: newPath = @"C:\Folder1\Folder2\";

157
A-Sharabiani

wenn c:\ordner1\ordner2\ordner3\bin der Pfad ist, gibt der folgende Code den Pfad des Basisordners des bin-Ordners zurück

string directory=System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString());

dh c:\ordner1\ordner2\ordner3

wenn Sie den Ordner2-Pfad haben möchten, können Sie das Verzeichnis über erhalten 

string directory = System.IO.Directory.GetParent(System.IO.Directory.GetParent(Environment.CurrentDirectory).ToString()).ToString();

dann erhalten Sie den Pfad als c:\ordner1\ordner2 \

16
Siby Sunny

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 offensichtlich, aber danach ist der angegebene String nicht mehr verwendbar, da es nur noch das '../' am Ende hinzufügt. Wenn Sie es mit Path.GetFullPath() umgeben, erhalten Sie den absoluten Pfad und können es verwenden.

5
Jacco

Sie können ..\path verwenden, um eine Ebene höher zu gehen, ..\..\path, um zwei Ebenen vom Pfad weg zu gehen.

Sie können auch die Klasse Path verwenden.

C # Pfadklasse

4
DotNetUser

Die folgende Methode durchsucht eine Datei, die mit dem Anwendungsstartpfad (Ordner * .exe) beginnt. Wenn die Datei dort nicht gefunden wird, 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.

public static FileInfo FindApplicationFile(string fileName)
{
    string startPath = Path.Combine(Application.StartupPath, fileName);
    FileInfo file = new FileInfo(startPath);
    while (!file.Exists) {
        if (file.Directory.Parent == null) {
            return null;
        }
        DirectoryInfo parentDir = file.Directory.Parent;
        file = new FileInfo(Path.Combine(parentDir.FullName, file.Name));
    }
    return file;
}

Hinweis: Application.StartupPath wird normalerweise in WinForms-Anwendungen verwendet, funktioniert jedoch auch in Konsolenanwendungen. Sie müssen jedoch einen Verweis auf die System.Windows.Forms-Assembly festlegen. Sie können Application.StartupPath durch ersetzen
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) wenn Sie möchten.

das kann helfen

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../../")) + "Orders.xml";
if (File.Exists(parentOfStartupPath))
{
    // file found
}
1
Thomas

Vielleicht können Sie eine Funktion verwenden, wenn Sie die Anzahl der Ebenen angeben und in eine Funktion einfügen möchten.

private String GetParents(Int32 noOfLevels, String currentpath)
{
     String path = "";
     for(int i=0; i< noOfLevels; i++)
     {
         path += @"..\";
     }
     path += currentpath;
     return path;
}

Und man könnte es so nennen:

String path = this.GetParents(4, currentpath);
0
CR41G14

Wenn Sie den Ordner kennen, zu dem Sie navigieren möchten, suchen Sie den Index und dann den Teilstring.

            var ind = Directory.GetCurrentDirectory().ToString().IndexOf("Folderame");

            string productFolder = Directory.GetCurrentDirectory().ToString().Substring(0, ind);
0
Taran

Ich habe einige virtuelle Verzeichnisse und kann keine Directory-Methoden verwenden. Also habe ich eine einfache Split/Join-Funktion für Interessierte erstellt. Nicht so sicher.

var splitResult = filePath.Split(new[] {'/', '\\'}, StringSplitOptions.RemoveEmptyEntries);
var newFilePath = Path.Combine(filePath.Take(splitResult.Length - 1).ToArray());

Wenn Sie also den Wert 4 nach oben verschieben möchten, müssen Sie lediglich 1 in 4 ändern und einige Überprüfungen hinzufügen, um Ausnahmen zu vermeiden.

0
Sauleil