Jak uzyskać katalog z pełnej ścieżki do pliku?


526

Jaki jest najprostszy sposób na uzyskanie katalogu, w którym znajduje się plik? Używam tego do ustawienia katalogu roboczego.

string filename = @"C:\MyDirectory\MyFile.bat";

W tym przykładzie powinienem pobrać „C: \ MyDirectory”.


3
Czy to nie powinien być dosłowny ciąg znaków? @"C:\MyDirectory\MyFile.bat"
Edgar

3
Czy ktoś chce chronić to pytanie, kto ma do tego prawo? 11 podobnych odpowiedzi z ostatnimi z 2017 r.
Boern

Odpowiedzi:


837

Jeśli zdecydowanie masz absolutną ścieżkę, użyj Path.GetDirectoryName(path).

Jeśli możesz uzyskać tylko nazwę względną, użyj new FileInfo(path).Directory.FullName.

Należy pamiętać, że Pathi FileInfooba znajdują się w przestrzeni nazw System.IO.


1
Rzeczywiście, ale czy istnieje metoda o nazwie GetDirectory? Czy to nie GetDirectoryName?
Brandon

1
Możesz po prostu użyć DirectoryName zamiast Directory.FullPath, prawda?
Steven Robbins

1
Byłem przeciwny otrzymywaniu względnego nazwiska. Nie zauważyłem, że ścieżka będzie absolutna. Mam teraz obie wersje :)
Jon Skeet

Czy używasz snippy, aby to sprawdzić? ;)
shahkalpesh

1
@UlyssesAlves: Uważam, że new FileInfo(path).Directory.FullNamepowinien działać w obu przypadkach.
Jon Skeet,



12

Możesz użyć System.IO.Path.GetDirectory(filename)lub zmienić ścieżkę w FileInfoi użyć FileInfo.Directory.

Jeśli robisz inne rzeczy ze ścieżką, FileInfomoże to mieć zalety.


1
w klasie ścieżki nie ma metody „GetDirectory”;
musiałeś

12

Użyj poniższego kodu, aby uzyskać ścieżkę do folderu

Path.GetDirectoryName(filename);

To zwróci „C: \ MyDirectory” w twoim przypadku



5

Jeśli pracujesz z FileInfoobiektem, istnieje prosty sposób na wyodrębnienie stringreprezentacji pełnej ścieżki katalogu za pośrednictwem DirectoryNamewłaściwości.

Opis FileInfo.DirectoryNamenieruchomości za pośrednictwem MSDN:

Pobiera ciąg reprezentujący pełną ścieżkę katalogu.

Przykładowe użycie:

string filename = @"C:\MyDirectory\MyFile.bat";
FileInfo fileInfo = new FileInfo(filename);
string directoryFullPath = fileInfo.DirectoryName; // contains "C:\MyDirectory"

Link do dokumentacji MSDN .


5

Możesz pobrać bieżącą ścieżkę aplikacji, używając:

string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();

Powodzenia!


0

Najpierw musisz użyć przestrzeni nazw System.IO. Następnie;

string filename = @"C:\MyDirectory\MyFile.bat";
string newPath = Path.GetFullPath(fileName);

lub

string newPath = Path.GetFullPath(openFileDialog1.FileName));

0

Możesz użyć Path.GetFullPathw większości przypadków. Ale jeśli chcesz uzyskać ścieżkę również w przypadku, gdy nazwa pliku jest względnie zlokalizowana, możesz użyć poniższej ogólnej metody:

string GetPath(string filePath)
{
  return Path.GetDirectoryName(Path.GetFullPath(filePath))
}

Na przykład:

GetPath("C:\Temp\Filename.txt") powrót "C:\Temp\"

GetPath("Filename.txt")wrócić current working directoryjak"C:\Temp\"


0

W moim przypadku musiałem znaleźć nazwę katalogu pełnej ścieżki (katalogu), więc po prostu:

var dirName = path.Split('\\').Last();

1
OP potrzebuje, "C:\MyDirectory"a nie potrzebuje MyDirectory. Porada dotycząca stosowania metod manipulacji ciągiem jest ryzykowna, istnieje wiele pułapek, a raczej należy stosować Pathmetody dedykowane .
Sinatr

-1

Path.GetDirectoryName (Context.Parameters [„assemblypath”])


Path.GetDirectoryNamejest wspomniany w wielu innych odpowiedziach (w tym w odpowiedziach zaakceptowanych)
barbsan

aha? Więc?? czy jest jakiś sens?
Ami Vaknin
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.