ディレクトリ内のファイルを再帰的に検索する
質問
私は、ディレクトリを通してファイルを再帰的に検索し、すべてのxmlファイルのリストを私に返すために、次のコードを持っています。 ルート ディレクトリの xml ファイルがリストに含まれないことを除いて、すべてうまく動作します。
最初にルートでディレクトリを取得し、次にファイルを取得するため、ルートでの GetFiles() 呼び出しが欠落しているので、その理由は理解できます。 私は foreach の前に GetFiles() 呼び出しを含めてみましたが、結果は私が期待するようなものではありませんでした。
public static ArrayList DirSearch(string sDir)
{
try
{
foreach (string d in Directory.GetDirectories(sDir))
{
foreach (string f in Directory.GetFiles(d, "*.xml"))
{
string extension = Path.GetExtension(f);
if (extension != null && (extension.Equals(".xml")))
{
fileList.Add(f);
}
}
DirSearch(d);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
return fileList;
}
私のディレクトリ構造は以下のようなものです。
RootDirectory
test1.0.xml
test1.1.xml
test1.2.xml
2ndLevDir
test2.0.xml
test2.1.xml
3rdLevDir
test3.0.xml
test3.1.xml
コードが返ります。
test2.0.xml
test2.1.xml
test3.0.xml
test3.1.xml
を含むすべてのファイルを返したい。
test1.0.xml
test1.1.xml
test1.2.xml
再帰についてあまりよく分かっていません。 何かご指摘があれば、非常に感謝します。
どのように解決するのですか?
あなたは このDirectory.GetFilesのオーバーロードは を使えば、例えばサブディレクトリを検索してくれます。
string[] files = Directory.GetFiles(sDir, "*.xml", SearchOption.AllDirectories);
このように1つの拡張子しか検索できませんが、次のような使い方ができます。
var extensions = new List<string> { ".txt", ".xml" };
string[] files = Directory.GetFiles(sDir, "*.*", SearchOption.AllDirectories)
.Where(f => extensions.IndexOf(Path.GetExtension(f)) >= 0).ToArray();
で、必要な拡張子を持つファイルを選択します(注:拡張子の大文字と小文字は区別されます)。
場合によっては、ファイルを ディレクトリ.EnumerateFilesメソッド :
foreach(string f in Directory.EnumerateFiles(sDir, "*.xml", SearchOption.AllDirectories))
{
// do something
}
コードが適切なアクセス権限を持っていないアカウントで実行された場合のUnauthorizedAccessExceptionなど、スローされる可能性のある例外については、ドキュメントを参照してください。
UnauthorizedAccessExceptionが問題である場合は、以下のサイトで細かい回答を参照してください。 Directory.EnumerateFiles => UnauthorizedAccessExceptionを参照してください。 .
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】コンパイルエラー「未割り当てのローカル変数を使用しています」が発生したのはなぜですか?
-
[解決済み】「namespace x already contains a definition for x」エラーの修正方法は?VS2010にコンバートした後に発生しました。
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】Unity 「関連するスクリプトを読み込むことができません」「Win32Exception: システムは指定されたファイルを見つけることができません"
-
[解決済み] C#の正しいバージョン番号を教えてください。
-
[解決済み] Microsoft Officeをインストールせずに、C#でExcel(.XLSおよび.XLSX)ファイルを作成するにはどうすればよいですか?
-
[解決済み] C#がforeachで変数を再利用するのは理由があるのか?
-
[解決済み] URLのPath.Combineは?
-
[解決済み] Powershellで複数のファイル内の文字列を検索してファイル名を返すには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】リソースの読み込みに失敗した:ステータス500(内部サーバーエラー)のサーバーの応答)
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み] 'IEnumerable<SelectListItem>' 型の ViewData アイテムで、キーが国であるものは存在しない。
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】「...は'型'であり、与えられたコンテキストでは有効ではありません」を解決するにはどうすればよいですか?(C#)
-
[解決済み] ...基礎となる接続は閉じられました。予期しないエラーが受信で発生しました
-
[解決済み】「namespace」なのに「type」のように使われる。