指定フォルダの中にある.特定の拡張子のファイルをリストUPする

もくじ
https://tera1707.com/entry/2022/02/06/144447

やりたいこと

Grepみたいな機能を作るために、指定した拡張子のファイルを、指定のフォルダの中から、子フォルダの中も含めて検索するような機能をつくりたい。

やりかた

DirectoryInfoクラスのGetFiles()GetDirectories()を使う。

サンプルコード

using Microsoft.UI.Xaml;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;

namespace FileVerUpTool
{
    public sealed partial class MainWindow : Window
    {
        string targetExt = "*.csproj";
        string targetDir = @"C:\Users\masa\source\repos\FlyoutableToggleButtonJikken";
        List<string> foundList = new();

        public MainWindow() => this.InitializeComponent();

        void SearchFiles(string target)
        {
            var parentDir = new DirectoryInfo(target);
            var files = parentDir.GetFiles(targetExt);

            // その階層にある対象ファイルをリストに入れる
            files.ToList().ForEach(x=> foundList.Add(x.FullName));

            // その階層にあるフォルダを探し、
            var childDirs = parentDir.GetDirectories();
            // フォルダの中を探しに行く(再帰的に)
            foreach (var dir in childDirs)
            {
                SearchFiles(dir.FullName);
            }
        }

        private void myButton_Click(object sender, RoutedEventArgs e)
        {
            // csprojを探す
            SearchFiles(targetDir);

            // 見つかった奴を表示する
            foundList.ForEach(x => Debug.WriteLine(x));
        }
    }
}

参考

ある文字列を含むすべてのファイルを検索する

https://dobon.net/vb/dotnet/file/searchtextinfiles.html