Як отримати каталог з повного шляху файлу?


526

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

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

У цьому прикладі я повинен отримати "C: \ MyDirectory".


3
Це не повинно бути рядковим буквалом? @"C:\MyDirectory\MyFile.bat"
Едгар

3
Хтось хоче захистити це питання, хто має на це права? 11 подібних відповідей з останньою з 2017 року ..
Боерн

Відповіді:


837

Якщо у вас точно є абсолютний шлях, використовуйте 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)або перетворити шлях на a 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методи.
Синатр

-1

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


Path.GetDirectoryNameзгадується в багатьох інших відповідях (включаючи прийняту відповідь)
barbsan

ага? Тому?? чи є якийсь момент?
Амі Вакнін
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.