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

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

string filename = @"C:MyDirectoryMyFile.bat";

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

12 ответов


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

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

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


System.IO.Path.GetDirectoryName(filename)

Path.GetDirectoryName(filename);

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

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


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

MSDN Link


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

Path.GetDirectoryName(filename);

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


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


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

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

Удачи!


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

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

во-первых, вы должны использовать систему.Пространство имен IO. Затем:

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

или

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

можно использовать 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\"


просто incase кто-то еще нуждается в этом, что я использовал для моего относительного пути:

string rootPath = "MyRootDir/MyFolder1/MyFolder2/myFile.pdf";
while (!string.IsNullOrWhiteSpace(Path.GetDirectoryName(rootPath))) 
{
    rootPath = Path.GetDirectoryName(rootPath);
} 
Console.WriteLine(rootPath); //Will print: "MyRootDir"