关于C#:从包含文件名的路径获取不带文件名的完整路径

Get full path without filename from path that includes filename

System.IO.Path中是否有内置的东西只提供文件路径?

例如,如果我有一个string

@"c:\webserver\public\myCompany\configs\promo.xml",

有什么BCL方法可以给我

"c:\webserver\public\myCompany\configs\"?


Path.GetDirectoryName()…但是您需要知道您传递给它的路径确实包含一个文件名;它只是从路径中删除最后一个位,不管是文件名还是目录名(实际上它不知道是哪个)。

您可以先通过在您的路径上测试File.Exists()和/或Directory.Exists()来验证是否需要调用Path.GetDirectoryName


1
Console.WriteLine(Path.GetDirectoryName(@"C:\hello\my\dear\world.hm"));


Path.GetDirectoryName()返回目录名,因此,对于所需的目录名(带有尾随的反斜线字符),可以调用Path.GetDirectoryName(filePath) + Path.DirectorySeparatorChar


如图所示,使用"getParent()"可以很好地工作。根据需要添加错误检查。

1
2
3
var fn = openFileDialogSapTable.FileName;
var currentPath = Path.GetFullPath( fn );
currentPath = Directory.GetParent(currentPath).FullName;

1
2
3
4
5
    string fileAndPath = @"c:\webserver\public\myCompany\configs\promo.xml";

    string currentDirectory = Path.GetDirectoryName(fileAndPath);

    string fullPathOnly = Path.GetFullPath(currentDirectory);


我用过这个,它很管用:

1
2
3
4
5
6
7
8
9
10
11
12
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));
        }
    }
}