在C#中获取当前目录名称的(最后一部分)


158

我需要获取当前目录的最后一部分,例如/Users/smcho/filegen_from_directory/AIRPassthrough,我需要从获取AIRPassthrough

使用python,我可以通过以下代码获得它。

import os.path

path = "/Users/smcho/filegen_from_directory/AIRPassthrough"
print os.path.split(path)[-1]

要么

print os.path.basename(path)

如何使用C#做同样的事情?

添加

在答复者的帮助下,我找到了我所需要的。

using System.Linq;
string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName  = fullPath.Split(Path.DirectorySeparatorChar).Last();

要么

string fullPath = Path.GetFullPath(fullPath).TrimEnd(Path.DirectorySeparatorChar);
string projectName = Path.GetFileName(fullPath);


1
在python中,您应该这样做os.path.basename(path)
ReneSac 2013年

Answers:


132

您正在寻找Path.GetFileName
请注意,如果路径以结束,则此方法将无效\


3
@anti:错了;我尝试过这个。字符串是字符串。Path.GetFileName("/Users/smcho/filegen_from_directory/AIRPassthrough")如果您不相信我,请粘贴到LINQPad中。
SLaks 2011年

@antisanity不,它将返回目录名称,但可能与问题所涉及的不完全相同。
2011年

@Jakob:有了标题,我想这就是问题所在。
SLaks 2011年

3
@Light:确实有效;试试吧。本Path类处理两个分离器。
SLaks 2011年

31
要使用Directory.GetDirectories检索的目录进行此工作,请使用:字符串directoryName = Path.GetFileName(directory.TrimEnd(Path.DirectorySeparatorChar));
Fatlad 2013年

184

您可以尝试:

var path = @"/Users/smcho/filegen_from_directory/AIRPassthrough/";
var dirName = new DirectoryInfo(path).Name;

20
我喜欢这个比选择的答案更好。(ab)使用GetFileName在语义上是错误的,因为它是您要检索的目录。同样,要使GetFileName具有确定性,则意味着您必须考虑到尾随正斜杠或反斜杠的可能性,并加以修剪,这很丑陋。
西蒙·布兰温

var dirName = new DirectoryInfo(Path.GetDirectoryName(pathWithFilename))。Name //更好
-kernowcode

@kernowcode我相信它将按照OP的要求返回“ filegen_from_directory”而不是“ AIRPassthrough”
。– codybartfast

1
@SimonBrangwin我以为一切都在Linux中是一个文件:)
Razor

12

好吧,准确回答您的问题标题:-)

var lastPartOfCurrentDirectoryName = 
   Path.GetFileName(Environment.CurrentDirectory);

12

根据您所拥有的,这是一个略有不同的答案。如果您有文件列表,并且需要获取文件所在的最后一个目录的名称,则可以执行以下操作:

string path = "/attachments/1828_clientid/2938_parentid/somefiles.docx";
string result = new DirectoryInfo(path).Parent.Name;

这将返回“ 2938_parentid”


8

而不是使用'/'进行拆分,最好使用Path.DirectorySeparatorChar

像这样:

path.split(Path.DirectorySeparatorChar).Last() 

1
我不喜欢使用此解决方案的一件事是,它对字符串的来源进行了假设。如果他们正在读取Windows系统上的* nix日志怎么办?然后,将使用错误的字符,您将获得整个路径,而不是预期的效果。只是我的2美分。
鲍勃·G

我对此表示同意。OP表示“当前目录的最后一部分”,因此,这很好。
Muad'Dib

6
var lastFolderName = Path.GetFileName(
    path.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar));

如果路径恰好包含正斜杠分隔符或反斜杠分隔符,则此方法有效。


1
看起来像string.TrimEnd()接受多个字符,因此无需使用多个调用。msdn.microsoft.com/zh-CN/library/…–
凯尔·德莱尼

1
@KyleDelaney就是这样!答案已调整。
Holf '17

1
这是一个params数组,所以.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)也可以。
凯尔·德莱尼

1
.TrimEnd()的应用位置不正确。应该将其应用于path,而不是Path.GetFileName。参见@Fatlad的回答
Tony,

2

试试这个:

String newString = "";
Sting oldString = "/Users/smcho/filegen_from_directory/AIRPassthrough";

int indexOfLastSlash = oldString.LastIndexOf('/', 0, oldString.length());

newString = oldString.subString(indexOfLastSlash, oldString.length());

代码可能已关闭(我尚未测试过),但是这个想法应该可行




0

您也可以使用Uri类。

new Uri("file:///Users/smcho/filegen_from_directory/AIRPassthrough").Segments.Last()

如果您想获得其他细分受众群,或者想要对网址进行相同的操作,则可能更喜欢使用此类。

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.