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

119

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

下面是文件路径,

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

这里的“text”是文件夹名。

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

10个回答

214

查看DirectoryInfo.Name

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

这难道不需要文件系统中实际存在该文件夹吗(如果文件系统中不存在文件夹“c:\ projects \ root \ wsdlproj \ devlop \ beta2 \ text”,则该完整文件路径的文件夹名称仍将为“text”)? - Peter Mortensen
@PeterMortensen,不是的。我刚刚测试了一下,即使文件夹路径不存在,该方法也会返回字符串中最低级别文件夹的名称。 - vbguyny
1
谢谢,非常棒的答案。但是我有点困惑,System.IO.Directory不支持这样的操作。 - anhoppe
1
@anhoppe - 我同意。我看到另一个选择是Path.GetDirectoryName https://msdn.microsoft.com/zh-cn/library/system.io.path.getdirectoryname(v=vs.110).aspx -- 但是直到明天我才能测试它。 - Don Cheadle

31

我认为你想从文件路径中获取父文件夹的名称。这很容易实现。

其中一种方法是创建一个FileInfo类型的对象并使用它的Directory属性。

示例:

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

String dirName = fInfo.Directory.Name;

15

试试这个

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

如果您将文件名转换为字符串,则它也会返回文件名。 - swissben
1
在这种情况下,文本是(没有扩展名的)文件名。我认为这就是OP想要的。如果它是一个文件夹或文件名实际上并不重要。如果字符串不包含文件名,这段代码将给他想要的东西。 - Øyvind Bråthen
4
除非路径末尾以反斜杠结尾,例如:@"c:\projects\roott\wsdlproj\devlop\beta2\text\" - Kristof Claes
1
这对于文件夹不起作用。我得到一个空字符串。必须存在一个文件。 - BraveNewMath
3
如果文件夹路径没有以反斜杠结束(例如从Path.GetDirectoryName()返回的文件夹路径),这个方法就可以正常工作。不过,GetFileName()函数的名称有点误导性。 - Peter Mortensen
这个在性能上比DirectoryInfo和FileInfo更好吗,因为不需要初始化一个新对象? - user3885927

10

你可以使用这个:

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
1
@Alex - 我修改了我的代码,使其能够处理这种类型的路径。StringSplitOptions.RemoveEmptyEntries 就是关键。 - Kristof Claes
根据http://msdn.microsoft.com/en-us/library/system.io.fileinfo.fileinfo.aspx,如果没有给予所需的权限,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"

4

我认为除了进入文件系统查找text.txt是目录还是文件以外,没有其他方法。如果你想要简单的方法,可以使用以下代码:

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

1
为了避免字符串前面的斜杠: s.Substring(s.LastIndexOf(@"") + 1); - David Yates

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
@disklosr - 刚刚用 ScriptCs 进行了测试,它返回了 'text'。 - Steve Cooper
2
如果文件夹路径不包含尾部反斜杠(例如从Path.GetDirectoryName()返回的文件夹路径),则这将正常工作。但是,该函数的名称GetFileName()有点误导。 - Peter Mortensen

0

基于之前的 答案(但已修复)

using static System.IO.Path;

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

来自.NET源代码GetFileName解释:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接