【備忘録用】UiPathとかRPAでファイルの存在チェックをワイルドカードを付けて実施したかったとき用。
File.Existsメソッドはワイルドカードが効きません。
.NETはWindowsだけのおもちゃとか思ってるアンポンタンさんはいないと思いますが、その前提としてすべてのルールがWindows OSに準拠するわけでないことを忘れがちです。
もし、”*”がワイルドカード一択になると、”*”がファイル名として許される処理系で動かなくなってしまいます。
このためかとな、と勝手に思っています。
ではどうするか・・・。
1)ワイルドカードを使って特定ディレクトリにあるファイルを取得する
あんまり細かく考えないでもいいんですよね。Directory.GetFilesの第2引数は検索条件が指定出来てこちらはワイルドカードが効きます。
Dim arFiles = System.IO.Directory.GetFiles(“C:\temp",”hogehoge*.txt)
これでOKです。ファイルが存在しなくても空の配列返してくれるのでヌルポでガっされなくても済みます。
注:ディレクトリが存在しないとエラー扱いで例外が発生します。存在が怪しい場合Directory.Existsメソッドで存在確認を行ってください。
2)結果の確認方法
1.Countメソッドを使用する方法
すぐに思いつくのは、次の通りです。存在しなくてもエラーが出ず0を返してくれるので安心です。
arFiles.Count() > 0
2. Anyメソッドを使用する方法(こちらがオススメ)
こちらがオススメです。DataTableに入っている行などのコレクション型は自身の個数を持ってるのでそこから取得します。
単純な配列は、すべての個数をクルクル回して確認するのでイロイロともったいないです。
そこで、Anyメソッド。メソッド内で一つでも要素があればtrueを返すのですんごい高速です。
arFiles.Any()
Containsメソッドなんかも知っておくと、配列内で特定のものが含まれているかを調べたいときにとても便利です。
配列の場合、頭からくるくる回しでチェックするので繰り返しで回すのと処理は同じですが、システムがやってくれる分高速です。