web-dev-qa-db-ja.com

フルパスからディレクトリを取得

私が持っている場合:

C:\ temp\foo\bar \

注:バーはディレクトリです)

どうすれば解析できますか:

バー

22
leora

私はそれを考え出した。

DirectoryInfo info = new DirectoryInfo(sourceDirectory_);
string currentDirectoryName = info.Name;
43
leora

試してみてください

System.IO.Path.GetFileName("C:\\temp\\foo\\bar");
21
Program.X

使用するだけです:

string dirname = new DirectoryInfo(@"C:\temp\foo\bar\").Name;      

MSDNによると、これはフルパスではなくディレクトリの名前を返します。

MSDNライブラリへのリンク

お役に立てれば.........

11
norbertB

たくさんの人が答えを撤回したようですが、それはおそらく残念です。

これは、「人に魚を教える」という品質のためだけに、述べる価値があります。短く、エレガントで、2つの別々のもので構成されており、一度学習すると、他の問題に再適用できます。

string lastPiece = wholePath.Split('\\').Last();

リストが空の場合、Lastがスローされます。

6

これを行う最も簡単な方法なし新しいDirectoryInfoインスタンスを作成することはPath.GetFileName静的メソッド。これはSystem.IOにあります。

using System.IO;

string lastFolderName = Path.GetFileName(@"C:\Folder1\Folder2");

変数は「Folder2」に設定されます。

これはかなり効率的です DirectoryInfoクラスの新しいインスタンスを作成することです!

5
Matthew M.

瞬時に4つの方法が考えられます

1

  • 文字列がスラッシュで終わっている場合は削除します
  • Path.GetFilename(または他の多数のSystem.IOメソッド)を使用する

2

  • スラッシュの文字列を配列に分割します
  • 配列の最後のインデックスを取得します

3

  • コンストラクターでそれを使用してUriクラスを作成します
  • セグメントプロパティを使用する

4

  • 誰かが上で言及したlinqの方法
4
Chris S
string dirname = new DirectoryInfo(path).Name;  
Console.WriteLine(dirname);   
1
Razvan

これを試して

string DirName = System.IO.Directory.GetParent(@"C:\temp\foo\bar\").Name;
0
Anuraj

Unixでは、これはベース名として知られています。簡単なグーグルがこれを思いつきました C#バージョンのリンク 。他にもあると思います...

0
MrTelly

上記の答えがニーズを満たさない場合は、最後の文字列を部分文字列化してみませんか。

string dirName = originalDirName.Substring(originalDirName.LastIndexOf("\\") + 1);

確かに、originalDirNameが\で終わっていないかどうか、originalDirNameがゼロより長く、実際に\文字が含まれているかどうかを確認する必要があります。

0
Wim Haanstra