2013-02-15 10 views
50

Jedną z opcji jest kilkakrotne wykonanie System.IO.Directory.GetParent(). Czy istnieje lepszy sposób poruszania się w kilku folderach z miejsca, w którym znajduje się zespół wykonawczy?Jak poruszać się w kilku folderach w górę?

Co próbuję zrobić, to znaleźć plik tekstowy, który znajduje się w jednym folderze nad folderem aplikacji. Ale sam zestaw znajduje się wewnątrz pojemnika, który znajduje się kilka folderów w folderze aplikacji.

+1

ilu folderów? – CR41G14

+0

powiedz 4 foldery w górę. – developer747

+1

zwykle względna ścieżka działa jak ".. \ .. \ .. \ .. \ DółFolder", ale to zależy od tego, co dokładnie próbujesz zrobić dla ...? – DiskJunky

Odpowiedz

2

Możesz użyć .. \ path, aby przejść o jeden poziom wyżej, .... \ path, aby przejść o dwa poziomy wyżej od ścieżki.

Możesz także użyć klasy ścieżki.

C# Path class

1

Być może można użyć funkcji, jeśli chcesz, aby zadeklarować liczbę poziomów i umieścić go w funkcji?

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

I można nazwać tak:

String path = this.GetParents(4, currentpath); 
+8

to nawet nie skompiluje ... –

2

Poniższa metoda przeszukuje plik rozpoczynający się od ścieżki uruchamiania aplikacji (* .exe folderu). Jeśli plik nie zostanie znaleziony, foldery nadrzędne są wyszukiwane do momentu znalezienia pliku lub dotarcia do folderu głównego. null jest zwracana, jeśli plik nie został znaleziony.

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

Uwaga: Application.StartupPath jest zwykle stosowany w aplikacjach WinForms, ale działa w aplikacjach konsolowych, jak dobrze; jednak trzeba będzie ustawić odniesienie do zespołu System.Windows.Forms. Jeśli wolisz, możesz zastąpić Application.StartupPath przez
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location).

2

To co pracował dla mnie najlepsze:

string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));

Pierwsze „prawo” ścieżka nie był problem, dodając „../” oczywiście, że nie, ale po tym, dany ciąg nie nadaje się do użytku, ponieważ po prostu doda "../" na końcu. Otaczenie go numerem Path.GetFullPath() da ci absolutną ścieżkę, dzięki czemu będzie można go używać.

94

Inny prosty sposób to zrobić to:

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

Uwaga Dotyczy to dwa poziomy w górę.Wynik będzie: newPath = @"C:\Folder1\Folder2\";

1

to może pomóc

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

jeśli c: \ folder1 \ folder2 \ folder3 \ pojemnik jest ścieżka czym ten kod powróci folder bazowej ścieżka folderu bin

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

czyli c: \ folder1 \ folder2 \ folder3

jeśli chcesz folder2 ścieżkę następnie można uzyskać katalogu przez

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

wtedy dostaniesz ścieżkę C: \ folder1 \ folder2 \

Powiązane problemy