完全なファイルパスからフォルダ名を取得する


116

アプリケーションの完全パスからフォルダ名を取得するにはどうすればよいですか?

これは以下のファイルパスです。

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

ここで「テキスト」はフォルダ名です。

このパスからそのフォルダー名を取得するにはどうすればよいですか?

回答:


205

DirectoryInfo.Nameを参照してください。

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

これには、フォルダーがファイルシステムに実際に存在している必要はありません(フォルダー "c:\ projects \ root \ wsdlproj \ devlop \ beta2 \ text"が存在しない場合、フォルダー名はその完全なファイルパスの "テキスト"のままです(現在)ファイルシステムに存在する)?
Peter Mortensen、2015

@PeterMortensen、いいえ。これをテストしたところ、フォルダーパスが存在しない場合でも、メソッドは文字列から最下位レベルのフォルダーの名前を返します。
vbguyny

1
ありがとう、素晴らしい答え。しかし、System.IO.Directoryがそのような操作をサポートしていないことに少し戸惑っています。
anhoppe 2016

1
@anhoppe-同意する。別のオプションのIソーはPath.GetDirectoryNameあるmsdn.microsoft.com/en-us/library/... -しかし、明日までそれをテストすることができません。
Don Cheadle 2018

30

ファイルパスから親フォルダ名を取得したいと思います。入手は簡単です。1つの方法は、FileInfo型オブジェクトを作成し、そのDirectoryプロパティを使用することです。

例:

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

String dirName = fInfo.Directory.Name;

16

これを試して

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

文字列にファイル名がある場合、ファイル名も返します
swissben

1
この場合、textは(拡張子なしの)ファイル名です。それがOPの後のことだと私は思った。それがフォルダかファイル名かは、実際には問題ではありません。文字列にファイル名が含まれていない場合、このコードは彼が何をしているかを彼に与えます。
ØyvindBråthen

4
パスが次のように\で終わっていない限り:@"c:\projects\roott\wsdlproj\devlop\beta2\text\"
Kristof Claes

1
これはフォルダに対しては機能しません。空白の文字列が表示されます。ファイルが存在する必要があります
BraveNewMath

3
これは、フォルダーパスに末尾のバックスラッシュが含まれていない場合(たとえば、Path.GetDirectoryName()から返されるフォルダーパスなど)には問題なく機能します。ただし、その関数の名前であるGetFileName()は少し誤解を招きます。
Peter Mortensen、2015

9

あなたはこれを使うことができます:

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

msdn.microsoft.com/en-us/library/…によると、必要な権限が与えられていない場合、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"

3

ファイルシステムにアクセスして、text.txtがディレクトリであるか単なるファイルであるかを確認する以外に方法はないと考えました。シンプルなものが欲しかったら、たぶん次のように使えます:

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

1
文字列の前のスラッシュを回避するには:s.Substring(s.LastIndexOf(@ "\")+ 1);
David Yates 2016年

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 '12

@disklosr-ScriptCでテストしたところ、「テキスト」が返されました
Steve Cooper、

2
これは、フォルダーパスに末尾のバックスラッシュが含まれていない場合(たとえば、Path.GetDirectoryName()から返されるフォルダーパスなど)には問題なく機能します。ただし、その関数の名前GetFileName()は少し誤解を招きます。
Peter Mortensen

0

以前の 回答に基づく(ただし修正済み)

using static System.IO.Path;

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

.NETソースGetFileNameからの説明:

指定されたパスの名前と拡張部分を返します。結果の文字列には、パスの最後のバックスラッシュ( "\")、スラッシュ( "/")、またはコロン( ":")文字に続くパスの文字が含まれます。末尾のスラッシュ、スラッシュ、またはコロン文字を削除した後、パスにバックスラッシュが含まれていない場合、結果の文字列はパス全体になります。パスがnullの場合、結果の文字列はnullです。


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