2011-03-08 228 views
75

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

这是下面的文件路径,

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

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

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

回答

147

DirectoryInfo.Name

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

谢谢亚历克斯....这是我想... – vasmay 2011-03-08 07:02:42

+0

非常感谢很多 – 2015-05-08 07:08:32

+0

这不需要该文件夹实际存在于文件系统中(如果文件夹为“c:\ projects \ root \ wsdlproj \ devlop”,该文件夹名称将仍然为“文本” \ beta2 \ text“目前没有存在于文件系统中)? – 2015-09-04 11:20:01

12

试试这个

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

如果你有一个文件名转换为字符串,返回文件名也 – swissben 2011-03-08 07:07:25

+1

在这种情况下,文本是(无扩展名)文件名。我认为那是OP之后的事情。如果它是一个文件夹或文件名实际上并不重要。如果字符串不包含文件名,这段代码将会给他以后的内容。 – 2011-03-08 07:32:09

+2

除非路径以\像这样结束:'@“c:\ projects \ roott \ wsdlproj \ devlop \ beta2 \ text \”' – 2011-03-08 08:25:32

7

您可以使用此:

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

如果路径如下所示:@“c:\ projects \ roott \ wsdlproj \ devlop \ beta2 \ text \”,因此需要额外的DirectorySeparatorChar – 2011-03-08 07:02:40

+1

@Alex - 我修改了我的代码以使其工作这些路径也是如此。 'StringSplitOptions.RemoveEmptyEntries'完成这个任务。 – 2011-03-08 08:24:25

+0

根据http://msdn.microsoft.com/en-us/library/system.io.fileinfo.fileinfo.aspx,如果未提供所需的权限,FileInfo可能会引发异常。 – 2012-06-05 20:15:30

21

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

例子:

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

String dirName = fInfo.Directory.Name; 
-2
Path.GetDirectoryName(@"c:\projects\roott\wsdlproj\devlop\beta2\text"); 

MSDN: Path.GetDirectoryName-Methode

+10

这将返回'c:\ projects \ roott \ wsdlproj \ devlop \ beta2',这不是OP后的内容。 – 2011-03-08 07:30:45

2

在这种情况下,要获得存储在strPath的变量文件:

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

这也可以做到像这样;

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

这将返回一个空字符串 – disklosr 2014-12-17 14:24:34

+0

@disklosr - 刚刚使用ScriptCs进行测试,并返回'text' – 2014-12-21 21:10:02

+0

如果文件夹路径不包含尾部反斜杠(例如[Path.GetDirectoryName( )](https://msdn.microsoft.com/en-us/system.io.path.getdirectoryname.aspx))。但是,该函数的名称GetFileName()有点误导。 – 2015-09-04 14:26:24

1

我想除了进入文件系统找出text.txt是一个目录还是一个文件是没有办法的。如果你想简单的东西,也许你可以使用:

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

为了避免在字符串前面出现斜线: s.Substring(s.LastIndexOf(@“\”)+ 1); – 2016-05-31 20:33:02

0

这里是为我工作,而无需创建一个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);