2017-10-29 8 views
4

xyzという名前のフォルダが(再帰的に)指定されたパスに存在するかどうかを確認し、終了した場合は完全なパスを取得してファイルをコピーできますか? 以下のようなものが動作するか、何か不足していますか?特定の名前のディレクトリがc#に存在するかどうかをチェックする方法は?

if (Directory.Exists(Path.Combine(textBox1.Text, "xyz")) 
{ 
    string directoryPath = Path.GetDirectoryName(textBox1.Text); 
} 

答えて

2

使用この:

Directory.GetDirectories(root, directoryName, SearchOption.AllDirectories); 

ルートはパスがで開始するとdirectoryNameでは、あなたが探している特定の名前です。 .Any()を使用して存在するかどうかを確認し、最初に.First()を取得することができます。

pinkfloydx33のコメントの後に編集

うん、EnumerateDirectoriesが良いだろう。

Directory.EnumerateDirectories(root, directoryName, SearchOption.AllDirectories).FirstOrDefault(); 

とヌルのチェック:あなたはこのを探していると思いますので、D:申し訳ありませんが、私は、現時点では、.NET 3.5モードでスタックしています。

+0

もっと簡単な方法がありますか? 'Directory.GetDirectories'は配列を返します。 –

+0

あなたが探しているものによって異なります。配列は、Directory.GetDirectories(root、directoryName、SearchOption.AllDirectories).FirstOrDefault()を使用してnullまたはリストの最初の項目を取得できるように、IEnumerableに型キャスト可能です。私はあなたがリストを必要とすることを期待するだろうが、私はそれがあなたが達成しようとしているものに依存していると思う。 – Kell

+0

EnumerateDirectoriesが好ましいでしょうし、列挙可能なものを返します。 GetDirectoriesは一度にすべての結果を返します。つまり、何千ものマッチがあった場合、大きな配列を取得すると時間がかかる可能性があります。一方、EnumerateDirectoriesは、Any/First/FirstOrDefaultを使用していて最初の一致で停止し、必要に応じてToArray/ToListをいつでも呼び出すことができます。おそらくここでは大したことではありませんが、この正確なことは、プロダクションアプリで私を噛まれてしまいました。GetDirectories/GetFilesを決して使用していないからです。 – pinkfloydx33