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”.
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”.
Odpowiedzi:
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.
new FileInfo(path).Directory.FullNamepowinien działać w obu przypadkach.
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.
Możesz użyć Path.GetDirectoryNamei po prostu podać nazwę pliku.
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 .
Możesz pobrać bieżącą ścieżkę aplikacji, używając:
string AssemblyPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString();
Powodzenia!
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\"
W moim przypadku musiałem znaleźć nazwę katalogu pełnej ścieżki (katalogu), więc po prostu:
var dirName = path.Split('\\').Last();
"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 .
Path.GetDirectoryName (Context.Parameters [„assemblypath”])
Path.GetDirectoryNamejest wspomniany w wielu innych odpowiedziach (w tym w odpowiedziach zaakceptowanych)
@"C:\MyDirectory\MyFile.bat"