从完整文件路径获取文件夹名称


116

如何从应用程序的完整路径获取文件夹名称?

这是下面的文件路径,

c:\projects\root\wsdlproj\devlop\beta2\text

这里的“文本”是文件夹名称。

如何从该路径获取该文件夹名称?

Answers:


205

参见DirectoryInfo.Name

string dirName = new DirectoryInfo(@"c:\projects\roott\wsdlproj\devlop\beta2\text").Name;

这是否不要求该文件夹实际上在文件系统中存在(如果文件夹“ c:\ projects \ root \ wsdlproj \ devlop \ beta2 \ text”不存在,则该完整文件路径的文件夹名称仍为 “ text”(文件系统中是否存在)?
彼得·莫滕森

@PeterMortensen,不。我刚刚对此进行了测试,即使文件夹路径不存在,该方法也会从字符串中返回最低级别的文件夹的名称。
vbguyny

1
谢谢,很好的答案。但是我对System.IO.Directory不支持这种操作感到有些困惑。
anhoppe

1
@anhoppe-我同意。另一种选择我看到的是Path.GetDirectoryName msdn.microsoft.com/en-us/library/... -但将无法对它进行测试,直到明天。
唐·奇德尔 Don Cheadle)'18年

30

我想您想从文件路径获取父文件夹名称。很容易得到。一种方法是创建FileInfo类型对象并使用其Directory属性。

例:

FileInfo fInfo = new FileInfo("c:\projects\roott\wsdlproj\devlop\beta2\text\abc.txt");

String dirName = fInfo.Directory.Name;

16

试试这个

var myFolderName = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
var result = Path.GetFileName(myFolderName);

如果您将文件名放入字符串中,它也会返回文件名
swissben

1
在这种情况下,文本是(无扩展名)文件名。我认为那是OP的追求。如果是文件夹或文件名实际上并不重要。如果字符串不包含文件名,则此代码将为他提供他所追求的。
岛之风Bråthen如此阐述

4
除非路径以\这样结束:@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
Kristof Claes

1
这不适用于文件夹。我得到一个空白字符串。必须存在一个文件
BraveNewMath 2012年

3
如果文件夹路径中不包含反斜杠(例如,从Path.GetDirectoryName()返回的文件夹路径),则此方法效果很好。但是,该函数的名称GetFileName()有点误导。
彼得·莫滕森

9

您可以使用此:

string path = @"c:\projects\roott\wsdlproj\devlop\beta2\text";
string lastDirectory = path.Split(new char[] { System.IO.Path.DirectorySeparatorChar }, StringSplitOptions.RemoveEmptyEntries).Last();

如果路径看起来像这样:@“ c:\ projects \ roott \ wsdlproj \ devlop \ beta2 \ text \”,那么需要额外的DirectorySeparatorChar
Alex Pacurar 2011年

1
@Alex-我修改了我的代码,使其也可以使用这些路径。StringSplitOptions.RemoveEmptyEntries绝招。
克里斯托夫·克拉斯

根据msdn.microsoft.com/zh-cn/library/…,如果未提供所需的权限,则FileInfo可以引发异常。
Daniel B

5

只需使用 Path.GetFileName

此处-从文件夹的完整路径中提取文件夹名称:

string folderName = Path.GetFileName(@"c:\projects\root\wsdlproj\devlop\beta2\text");//Return "text"

这是一些额外的-从文件的完整路径中提取文件夹名称:

string folderName = Path.GetFileName(Path.GetDirectoryName(@"c:\projects\root\wsdlproj\devlop\beta2\text\GTA.exe"));//Return "text"

3

我认为除了进入文件系统之外,没有其他方法可以找出text.txt是目录还是文件。如果您想要简单的东西,也许您可​​以使用:

s.Substring(s.LastIndexOf(@"\"));

1
为了避免在字符串的开头使用斜杠:s.Substring(s.LastIndexOf(@“ \”)+ 1);
大卫·耶茨

2

在这种情况下,要获取的文件存储在strpath变量中:

string strPath = Server.MapPath(Request.ApplicationPath) + "/contents/member/" + strFileName;

2

这是一种对我有用的替代方法,无需创建DirectoryInfo对象。关键点是GetFileName()当路径中没有尾部斜杠时可以使用。

var name = Path.GetFileName(path.TrimEnd(Path.DirectorySeparatorChar));

例:

var list = Directory.EnumerateDirectories(path, "*")
        .Select(p => new
        {
            id = "id_" + p.GetHashCode().ToString("x"),
            text = Path.GetFileName(p.TrimEnd(Path.DirectorySeparatorChar)),
            icon = "fa fa-folder",
            children = true
        })
        .Distinct()
        .OrderBy(p => p.text);

1

也可以这样做。

var directoryName = System.IO.Path.GetFileName(@"c:\projects\roott\wsdlproj\devlop\beta2\text");

这将返回一个空字符串
disklosr 2014年

@disklosr-刚刚使用ScriptCs测试过,它返回“文本”
Steve Cooper

2
如果文件夹路径中不包含反斜杠(例如,从Path.GetDirectoryName()返回的文件夹路径),则此方法效果很好。但是,该函数的名称GetFileName()有点误导。
彼得·莫滕森

0

根据先前的 答案(但固定)

using static System.IO.Path;

var dir = GetFileName(path?.TrimEnd(DirectorySeparatorChar, AltDirectorySeparatorChar));

说明GetFileName.NET来源

返回给定路径的名称和扩展名。结果字符串包含路径中最后一个反斜杠(“ \”),斜杠(“ /”)或冒号(“:”)后面的path字符。如果在删除尾部的斜杠,斜杠或冒号字符后path不包含反斜杠,则结果字符串为整个路径。如果path为null,则结果字符串为null。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.