- - PR -
済)ファイル名を複数の条件で検索する
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-04-12 11:52
C#での質問です。
フォルダ内のファイルを検索するソフトを作成中です。 そこで条件として複数のワイルドカード指定を考えています。 例えば・・・ a*.txt *bcd*.exe 上記の2つの条件をorでヒットするファイルをリストアップするといった感じです。 実装する方法として2つほど考えています。 1)1フォルダに対してDirectory.GetFilesを設定されたワイルドカードの数だけ繰り返す 2)Directory.GetFilesにてすべてのファイルを取得した後、ワイルドカードと一致するかどうか1ファイルごとに判断する ここで質問ですが、2)の方法をとる場合取得したあとのファイル名に対してワイルドカードと一致するかどうか判断する方法ってあるのでしょうか? もし、この2つの方法以外にこういうのもあるよ?っていう方もアドバイスお願いします。 _________________ うちうせん [ メッセージ編集済み 編集者: うちうせん 編集日時 2007-04-12 11:53 ] [ メッセージ編集済み 編集者: うちうせん 編集日時 2007-04-18 12:10 ] | ||||
|
投稿日時: 2007-04-12 12:03
いくつかありますが、C# となれば正規表現で良いのではないでしょうか。 VB であれば、Like 演算子という選択肢もありますが。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-04-12 12:15
返答ありがとうございます。
正規表現クラスとしてregexというクラスを見つけました。 その線も考えてはいたのですが、検索条件をユーザーが指定できるようにしたいため、簡単なワイルドカードをつかっての条件設定ができれば助かるのですが・・・ 正規表現のことは詳しくはないのですが、正規表現になるとある程度の知識が必要な気がして条件設定のハードルがあがりそうな感じがしたもので。 VBでLike演算子が使えるので、その判断部分のみVBを使用する方がいいんでしょうか・・・ _________________ by うちうせん | ||||
|
投稿日時: 2007-04-12 12:53
ユーザの入力を、正規表現形式に置換して、Regex を使ってはどうでしょうか?
? -> . * -> .* といった感じで。他に、正規表現の特殊文字( + など )のエスケープとかは、 しないといけないでしょうけど。 | ||||
|
投稿日時: 2007-04-12 13:45
ワイルドカード入力を正規表現に変換する方法についてですが・・・
正規表現のメタ文字の中でファイル名に使用できる文字をエスケープ処理する(\付け)で合ってますか? そこでワイルドカード *.exe を正規表現にするとします。 自分なりに考えた答えだと ".*\.exe" だったんですが・・・どうも"\."がだめらしくコンパイルエラーがでます。 正規表現に詳しい方アドバイスお願いします。 調べた結果正規表現のメタ文字は .\/[]^-?+*(){}$|! ということですが、この中で単純に\付けではダメだとか、ほかにもこんなメタ文字があるとかあれば教えてください。 開発環境を書き忘れていました WindowsXP Pro SP2 VS2005 Standard _________________ うちうせん [ メッセージ編集済み 編集者: うちうせん 編集日時 2007-04-12 13:45 ] [ メッセージ編集済み 編集者: うちうせん 編集日時 2007-04-12 13:47 ] | ||||
|
投稿日時: 2007-04-12 20:35
存在しているファイルを検索するんでしょ?[Win]+[F]じゃだめなの?
_________________ | ||||
|
投稿日時: 2007-04-13 00:01
検索のあとにいろいろと処理が入るので・・・
| ||||
|
投稿日時: 2007-04-13 09:54
>コンパイルエラー
まずその詳細を書くべきですが、推測するにC#自体のエスケープ文字列も¥ですので、おそらくそれが原因でしょう。文字列として¥を表現する場合には "¥¥" とするか @"¥" と必要があります。 正規表現パターンの場合¥¥はめんどくさいし見通しが悪いので、大抵 @"" リテラルを使いますが。 まぁそれはいいとして、Regex クラスの静的メソッドに Escape っていうのがありますので、正規表現のメタ文字を調べたりしないでそっちを使いましょう。将来メタ文字が拡張されないとも限らないし。 あと、正規表現の場合全文マッチの場合は^とか$とかをつけたほうがよろしいです(意味はリファレンスを参照してください)。 その辺踏まえたうえで適当にコードにしてみました。
いろいろ適当ですんで意味は理解してから使ってくださいね。仕様により修正する必要があるかもしれませんので。 [ メッセージ編集済み 編集者: ya 編集日時 2007-04-13 09:56 ] |