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

回答:


132

あなたが探していPath.GetFileNameます。
パスがで終わる場合、これは機能しないことに注意してください\


3
@アンチ:間違っています。私はそれを試してみました。文字列は文字列です。Path.GetFileName("/Users/smcho/filegen_from_directory/AIRPassthrough")信じられない場合は、LINQPadに貼り付けてください。
SLaks、

@antisanityいいえ、それはディレクトリ名を返しますが、おそらく質問が正確に何であったかではありません。
JakobMöllås、

@ヤコブ:タイトルを考えると、これが問題だと思います。
SLaks、

3
@Light:それはない仕事を。それを試してみてください。Pathクラスは、両方のセパレータを処理します。
SLaks、

31
Directory.GetDirectoriesによって取得されたディレクトリでこれを機能させるには、次のコマンドを使用します。
Fatlad 2013

185

あなたは試すことができます:

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

20
私はこれを選んだ答えよりも好きです。(Ab)GetFileNameの使用は、取得しようとしているディレクトリであるため、意味的に間違っています。また、GetFileNameを確定的にするためには、末尾のスラッシュまたはバックスラッシュの可能性を考慮し、それを取り除く必要があります。これは醜い方法です。
Simon Brangwin、2015年

var dirName = new DirectoryInfo(Path.GetDirectoryName(pathWithFilename))。Name //より良い
kernowcode

@kernowcode OPの要求に応じて、「AIRPassthrough」ではなく「filegen_from_directory」を返すと思います
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
このソリューションを使用したくない点の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/en-us/library/…–
カイルデラニー

1
@KyleDelaneyだからそうする!回答を調整しました。
Holf 2017

1
これはparams配列なので、.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar)うまくいきます。
カイルデラニー2017

1
.TrimEnd()の適用場所が正しくありません。Path.GetFileNameではなく、pathに適用する必要があります。@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());

コードはオフになっている可能性がありますが(テストしていません)、アイデアは機能するはずです。


1

これは私には問題なく動作します:)

Path.GetFileName(path.TrimEnd('\\')


0

Uriクラスを使用することもできます。

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

他のセグメントを取得したい場合、またはWebアドレスで同じことをしたい場合は、このクラスを使用することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.