Jedną z opcji byłoby wykonanie System.IO.Directory.GetParent () kilka razy. Czy istnieje bardziej wdzięczny sposób na przejście o kilka folderów w górę z miejsca, w którym znajduje się zestaw wykonawczy?
To, co próbuję zrobić, to znaleźć plik tekstowy, który znajduje się jeden folder nad folderem aplikacji. Ale sam zestaw znajduje się w koszu, który znajduje się kilka folderów głęboko w folderze aplikacji.
c#
.net
console-application
programista747
źródło
źródło
Directory.SetCurrentDirectory(@"..\..\..\..");
Odpowiedzi:
Innym prostym sposobem jest zrobienie tego:
Uwaga To idzie o dwa poziomy w górę. Wynik byłby taki:
newPath = @"C:\Folder1\Folder2\";
źródło
Path.Combine
gdy i tak dodajesz ukośnik odwrotny ręcznie. Rozważ użyciePath.Combine(path, "..", "..")
zamiast tego.jeśli c: \ folder1 \ folder2 \ folder3 \ bin to ścieżka, to poniższy kod zwróci ścieżkę do folderu podstawowego folderu bin
tzn. c: \ folder1 \ folder2 \ folder3
jeśli chcesz ścieżkę folder2, możesz pobrać katalog przez
wtedy otrzymasz ścieżkę jako c: \ folder1 \ folder2 \
źródło
Możesz użyć,
..\path
aby przejść o jeden poziom wyżej,..\..\path
aby przejść dwa poziomy w górę od ścieżki.Możesz też użyć
Path
klasy.Klasa C # Path
źródło
Oto, co zadziałało najlepiej dla mnie:
string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));
Uzyskanie „właściwej” ścieżki nie stanowiło problemu, dodanie „../” oczywiście to robi, ale po tym podany ciąg nie nadaje się do użytku, ponieważ po prostu doda „../” na końcu. Otaczanie go
Path.GetFullPath()
da ci absolutną ścieżkę, czyniąc ją użyteczną.źródło
Poniższa metoda przeszukuje plik zaczynający się od ścieżki startowej aplikacji (folder * .exe). Jeśli plik nie zostanie tam znaleziony, foldery nadrzędne są przeszukiwane do momentu znalezienia pliku lub osiągnięcia folderu głównego.
null
jest zwracany, jeśli plik nie został znaleziony.Uwaga:
Application.StartupPath
jest zwykle używany w aplikacjach WinForms, ale działa również w aplikacjach konsolowych; jednak będziesz musiał ustawić odniesienie doSystem.Windows.Forms
zestawu. Jeśli wolisz, możesz wymienićApplication.StartupPath
naPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
.źródło
Może mógłbyś użyć funkcji, jeśli chcesz zadeklarować liczbę poziomów i umieścić ją w funkcji?
Można to nazwać tak:
źródło
DO#
źródło
to może pomóc
źródło
Mam kilka katalogów wirtualnych i nie mogę użyć metod katalogów. Zrobiłem więc prostą funkcję dzielenia / łączenia dla zainteresowanych. Jednak nie tak bezpieczne.
Tak więc, jeśli chcesz, aby przejść od 4, po prostu trzeba zmienić
1
, aby4
dodać niektóre kontrole, aby uniknąć wyjątków.źródło
Jeśli znasz folder, do którego chcesz przejść, znajdź jego indeks, a następnie podciąg.
źródło
a
na przykład tylko? A co jeśli ścieżka wygląda takC:\Folderame3\Folderame2\Folderame\...
?