2017-07-12 3 views
1

私は自分の.exeコンソールアプリケーションと同じディレクトリにフォルダを持っています。私はそのフォルダ内のすべてのフォルダのリストを作成したい(それはClientFilesと呼ばれている)が、私は完全なパスを望んでいない。私はこのような階層構造を持っているのであれば:「Folder1に」、「フォルダ2」、「FOLDER3」:指定したフォルダ内のすべてのフォルダのパス名ではなく、名前をリストに格納しますか?

ClientFiles 

---\ Folder1 

---\ Folder2 

---\ Folder3 

私は、文字列を含むリストで終わる必要があります。

List<string> clientNumbers = Directory 
    .GetDirectories(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\") 
    .ToList<string>(); 

それが戻っされるリストには、各要素の完全なパスが含まれています

これは私が今持っているものです。これを解決する簡単な方法はありますか?私は前のパスのテキストを先読みして削除することができると思うが、それは余分に見える。 LINQラムダ式を使用

List<string> clientNumbers = Directory.GetDirectories(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\").ToList<string>() 
    .Select(x=>x.Split('\').LastOrDefault()); 

答えて

1

これを達成する方法はいくつかあります。

最初は単にあなたが既に知っている成分を除去されています

string directory = AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\"; 
List<string> clientNumbers = Directory 
    .GetDirectories(directory) 
    .Select(x => x.Substring(AppDomain.CurrentDomain.BaseDirectory.Length - 1) 
    .ToList(); 

は(それはフォルダオブジェクトの場合は、フォルダの名前)、あなただけのファイルの名前をしたいと仮定すると、あなたはPath class

List<string> clientNumbers = Directory 
    .GetDirectories(directory) 
    .Select(x => Path.GetFileName(x)) 
    .ToList(); 
を使用することができます
+0

特にここでは、フォルダ名のみが望まれているfileNamesをしないでください。 –

+0

@CapnJack関数名を少し誤解しますが、 'Path.GetFileName(string)'はフォルダオブジェクトであればフォルダ名を与えます。 – JNYRanger

+1

うわー、これは誤解を招くものですが、うまくいきます!最も簡単な応答のためのあなたの答えとして印を付けるつもりです。ありがとう –

0

次のような終わり.Select(x=>x.Split('\').LastOrDefault())を追加することができますLINQ:

List<string> clientNumbers = System.IO.Directory.GetDirectories(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\") 
.Select(x => x.Replace(AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\", "")).ToList(); 
0

:文字列はビットで

2

NULL可能であるよう

List<string> clientNumbers = Directory.GetDirectories(
          AppDomain.CurrentDomain.BaseDirectory + "ClientFiles\\") 
          .ToList<string>().Select(s=>s.Split("\\").Last()); 

LastOrDefaultは、同じ戻ります

+0

これは私が心に留めていたものです。しかし、JNYRangerの応答は少しシンプルなので答えとしてマークします。 –

+0

それぞれ私はそう思う;)。しかし、これはあなたのためにクリアされてうれしいです – Jaxi

関連する問題