みなさんお疲れ様です
以下の図のように、アスタリスクを利用したファイル指定は、有効でしょうか?
アスタリスクの箇所は都度変更となるため、このように指定し、1つでもファイルがあれば処理をしたいです
やってみて、どんな結果でした?
お疲れさまです
条件分岐でElseに落ちちゃいますね。。。
なかなか悩ましい話ですね。
パスの有無を確認する前に、配列に入っているフルパス名がそのワイルドカードと一するかを聞いて、それからパスの有無を確認と言う、やや手間なロジックでは如何でしょう?
ファイルの一覧を処理する場合、一般的にはコレクションの各要素アクティビティを使用して、コレクションの所に
System.IO.Directory.GetFiles(“フォルダパス”)
を設定すると思いますが、ファイル名の指定も使用可能で
system.IO.Directory.GetFiles(“フォルダパス”,“特定の文字”)
とすることが出来ます。
※今回の場合
system.IO.Directory.GetFiles(wkfolder,“AreaImage*.csv”)
※件数だけほしい場合はstringの配列で返ってきますので、.Lengthで取得可能です。
※書いておいてなんですが、HANACCHIさんの言うように、多少手間がかかっても、ループで1件ずつ処理したやり方の方が私的にはおすすめです。
(現場担当者で保守する場合、単に短く記述したりするのではなく、なるべく前提知識がなくても読める(変更できる)ことが大事だと思っているからです。あまりに複雑になるものは別ですが。。)
せっかくなのでブログ書いてみた。
Stringの配列で要素があるかどうかは Anyメソッド使うのがお勧めです。
「.NETの関数を使ってワイルドカードを使用したファイルの存在チェックがしたい!」
このような形で作ってみました。
ただ、、、、TRUEにならないですね。。。条件が正しくないですかね。。。
ワイルドカードを使った比較は=では難しいです。
※できないんじゃないかな。。。
2つほど解決案を
1.文字列の一致をチェックのアクティビティを使用する
正規表現は
“^” & wkfolder & “AreaImage.*\.csv$”
になるかと思います。
※アクティビティなので、正攻法なのですが、正規表現は正直理解が難しいかと。。
2.Likeを使用する
Conditionに
item.ToString Like wkfolder & “AreaImage*.csv”
と入力していただければ希望通りになるかと。
※こちらの方が分かりやすいかと思います。
以下参考
item.ToString.Contains("Arealmage")
でやってみてください。
item.ToString = ("Arealmage*.csv")
この場合だと「*」の字は普通の文字で見るので、条件としてはTRUEにならないですねー
いろんな方法がありますが:
Directory.GetFiles() でファイル名を取得するのではなく、
Directory. GetFileSystemEntries()を使うとパターンマッチングでファイル名を指定できるので、
実現したい方法にもう少し近づくかもです。
http://hensa40.cutegirl.jp/archives/820
パターンマッチングでマッチしたファイルを配列で返すので、IFの条件は [ファイル名配列].length =0 とかでよいのかな。
DirectoryInfo.GetFilesやEnumerateFilesを使用する場合、予想とは違う動きをするケースがあるようです。
ループで処理した方が無難かも。。
こちらの方法で実装いたしました。特定の文字のファイルがあれば、そのファイルを処理するやり方としました。
ありがとうございます