Как мне получить каталог по полному пути файла?


527

Какой самый простой способ получить каталог, в котором находится файл? Я использую это, чтобы установить рабочий каталог.

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

В этом примере я должен получить «C: \ MyDirectory».


3
Разве это не должен быть строковый литерал? @"C:\MyDirectory\MyFile.bat"
Эдгар

3
Кто-то хочет защитить этот вопрос, у кого есть на это право? 11 похожих ответов с последним из 2017 года ..
Boern

Ответы:


838

Если у вас определенно есть абсолютный путь, используйте Path.GetDirectoryName(path).

Если вы можете получить только относительное имя, используйте new FileInfo(path).Directory.FullName.

Обратите внимание, что Pathи FileInfoоба находятся в пространстве имен System.IO.


1
Действительно, но есть ли метод с именем GetDirectory? Разве это не GetDirectoryName?
Брэндон

1
Вы можете просто использовать DirectoryName вместо Directory.FullPath, не так ли?
Стивен Роббинс

1
Я защищал от получения относительного имени. Я не заметил, что путь будет абсолютным. Теперь у меня есть обе версии :)
Джон Скит

Вы используете snippy, чтобы проверить это? ;)
Шахкальпеш

1
@UlyssesAlves: я считаю, new FileInfo(path).Directory.FullNameдолжно работать в любом случае.
Джон Скит



12

Вы можете использовать System.IO.Path.GetDirectory(filename)или превратить путь в FileInfo, и использовать FileInfo.Directory.

Если вы делаете другие вещи с этим путем, у них FileInfoмогут быть преимущества.


1
в классе Path нет метода GetDirectory; должно быть, вы имели в виду 'GetDirectoryName
BillW

12

Используйте приведенный ниже код, чтобы получить путь к папке

Path.GetDirectoryName(filename);

Это вернет "C: \ MyDirectory" в вашем случае



5

Если вы работаете с FileInfoобъектом, есть простой способ извлечь stringпредставление полного пути каталога через DirectoryNameсвойство.

Описание FileInfo.DirectoryNameнедвижимости через MSDN:

Получает строку, представляющую полный путь к каталогу.

Пример использования:

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

Ссылка на документацию MSDN .


5

Вы можете получить текущий путь к приложению, используя:

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

Удачи!


0

Во-первых, вы должны использовать пространство имен System.IO. Затем;

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

или

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

0

Вы можете использовать Path.GetFullPathдля большинства случаев. Но если вы хотите получить путь также, если имя файла относительно расположено, вы можете использовать следующий общий метод:

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

Например:

GetPath("C:\Temp\Filename.txt") возвращение "C:\Temp\"

GetPath("Filename.txt")вернуться current working directoryкак"C:\Temp\"


0

В моем случае мне нужно было найти имя каталога полного пути (каталога), поэтому я просто сделал:

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

1
ОП нужен "C:\MyDirectory"а не MyDirectory. Совет использовать методы манипуляции со строками рискован, есть много ловушек, лучше использовать специальные Pathметоды.
Синатр

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.