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

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" в вашем случае

thejustv
источник
10

Вы можете использовать Path.GetDirectoryNameи просто передать имя файла.

MSDN Link

Brandon
источник
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 .

Дерек W
источник
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методы.
Синатр
-1

Path.GetDirectoryName (Context.Parameters [ "assemblypath"])

Ами Вакнин
источник
Path.GetDirectoryNameупоминается во многих других ответах (включая принятый ответ)
Барбсан
ахх? Так?? есть ли смысл в будущем?
Ами Вакнин