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

365

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

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

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

  • 3
    Разве это не должен быть строковый литерал? @"C:\MyDirectory\MyFile.bat"
  • 2
    Кто-то хочет защитить этот вопрос, у кого есть на это право? 11 похожих ответов с последним из 2017 года ..
Теги:
directory
file
file-io

10 ответов

572
Лучший ответ

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

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

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

  • 0
    Действительно, но есть ли метод с именем GetDirectory? Разве это не GetDirectoryName?
  • 1
    Вы можете просто использовать DirectoryName вместо Directory.FullPath, не так ли?
Показать ещё 3 комментария
38
System.IO.Path.GetDirectoryName(filename)
  • 0
    Обновлен для упоминания пространства имен.
18
Path.GetDirectoryName(filename);
13

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

Если вы делаете другие вещи с помощью пути, FileInfo может иметь преимущества.

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

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

Ссылка MSDN

6

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

Path.GetDirectoryName(filename);

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

4

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

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

Удачи!

4

Если вы работаете с объектом 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.

1

Во-первых, вы должны использовать пространство имен 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") return "C:\Temp\"

GetPath("Filename.txt") return current working directory like "C:\Temp\"

Сообщество Overcoder
Наверх
Меню