Получить полный путь без имени файла из пути, который включает имя файла - PullRequest
176 голосов
/ 30 сентября 2010

Есть ли что-то встроенное в System.IO.Path, которое дает мне только путь к файлу?

Например, если у меня есть string

@ "C: \ вебсервер \ Public \ моякомп \ \ promo.xml изменение настроек",

есть ли метод BCL, который даст мне

"C: \ вебсервер \ Public \ моякомп \ конфиги \"?

Ответы [ 6 ]

212 голосов
/ 30 сентября 2010

Path.GetDirectoryName() ... но вам нужно знать, что путь, который вы передаете, содержит имя файла; он просто удаляет последний бит из пути, будь то имя файла или имя каталога (фактически он не знает, какой именно).

Сначала вы можете проверить, протестировав File.Exists() и / или Directory.Exists() на своем пути, чтобы узнать, нужно ли вам звонить Path.GetDirectoryName

62 голосов
/ 30 сентября 2010
Console.WriteLine(Path.GetDirectoryName(@"C:\hello\my\dear\world.hm")); 
49 голосов
/ 30 сентября 2010

Path.GetDirectoryName() возвращает имя каталога, поэтому для того, что вы хотите (с завершающим обратным символом солидуса), вы можете вызвать Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar.

8 голосов
/ 06 февраля 2018
    string fileAndPath = @"c:\webserver\public\myCompany\configs\promo.xml";

    string currentDirectory = Path.GetDirectoryName(fileAndPath);

    string fullPathOnly = Path.GetFullPath(currentDirectory);
5 голосов
/ 03 июля 2017

Используйте 'GetParent ()', как показано, работает хорошо. Добавьте проверку ошибок по мере необходимости.

var fn = openFileDialogSapTable.FileName;
var currentPath = Path.GetFullPath( fn );
currentPath = Directory.GetParent(currentPath).FullName;
4 голосов
/ 01 марта 2013

Я использовал это, и он хорошо работает:

string[] filePaths = Directory.GetFiles(Path.GetDirectoryName(dialog.FileName));

foreach (string file in filePaths)
{   
    if (comboBox1.SelectedItem.ToString() == "")
    {
        if (file.Contains("c"))
        {
            comboBox2.Items.Add(Path.GetFileName(file));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...