C#とVBScriptのブログ

VBScriptユーザーがC#に挑戦だ

フォルダ内のファイル名をワイルドカードで検索し、更に正規表現で検索する

フォルダ内のファイル名をワイルドカードで検索し、更に正規表現で検索する<参考>
fenri's diary
正規表現を使用してファイルを探す
http://fenri.hatenablog.com/entry/2014/05/15/191224

smdn:総武ソフトウェア推進所
正規表現
http://smdn.jp/programming/netfx/regex/


動作確認済

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace SampleKese
{
    /*
     * 
     */
    class Program
    {
        static void Main(string[] args)
        {
            string[] files = FindFiles(@"C:\tmp", @"Hoge0123_up|dn_\d{8}\.zip$", "*.zip", true);
            foreach (string file in files)
            {
                Console.WriteLine(file);
            }
        }

        /*
         * フォルダ内のファイル名をワイルドカードで検索し、更に正規表現で検索する。
         * path:       対象フォルダ
         * pattern:    正規表現
         * wildcard:   ワイルドカード
         * ignorecase: trueの時大文字小文字を区別しない。既定値はtrue
         */
        static string[] FindFiles(string path, string pattern, string wildcard, bool ignorecase)
        {
            List<string> lst = new List<string>();
            RegexOptions opt = RegexOptions.None;
            if (ignorecase) opt |= RegexOptions.IgnoreCase;
            Regex reg = new Regex(pattern, opt);
            DirectoryInfo dir = new DirectoryInfo(path);
            FileInfo[] files = dir.GetFiles(wildcard);
            foreach (FileInfo f in files)
            {
                if (reg.IsMatch(f.FullName))
                {
                    lst.Add(f.FullName);
                }
            }
            //return ((string[])lst.ToArray());
            return lst.ToArray();
        }
    }
}