2011-03-08 273 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);