UiPathで特定のフォルダ内のファイルを一括取得したいときにSystem.IO.Directory.GetFiles("ファイル名")
という構文を使う人は多いのではないでしょうか!
しかし、特定のフォルダ内の特定の条件に当てはまるファイルだけとりたいんだー!!というときもあります。
今回はそれの対応策についてお話します。
とりあえずよく使うあるあるのやり方たち
もしかしたらご存知の方も多いかもしれませんが、少々お付き合いください...!
サブフォルダに入っているファイルも全部取得したいとき
普通にSystem.IO.Directory.GetFiles("フォルダ名")
を使うと、サブフォルダのファイルは取得できません。指定したディレクトリ内のファイルしか取れません。
サブフォルダに入っているファイルも全部取得したいときは、このように使います。
System.IO.Directory.GetFiles("フォルダ名", "*", System.IO.SearchOption.AllDirectories)
特定の拡張子のファイルだけ取得したいとき
例えばExcelのファイルだけ取得したい場合は、.xlsx
の拡張子のファイルだけ取得すればいいですよね!
というわけで、例えば.xlsx
の拡張子のファイルだけ取得するには以下の構文が使えます。
もちろん、.txt
でも.doc
でも同じようにすればできます!
System.IO.Directory.GetFiles("フォルダ名", "*.xlsx")
また、先ほどのサブフォルダも全部ファイル取得するコードと組み合わせて以下のようにすることもできます。
System.IO.Directory.GetFiles("フォルダ名", "*.xlsx", System.IO.SearchOption.AllDirectories)
もっと柔軟に条件つけてファイル取得したい!!
そうですよね、特定の拡張子だけ取得したい場合や、サブフォルダも全てファイルを取得したい場合もあると思いますが、もっと柔軟に条件つけてファイルしたいときもありますよね。
例えば、"qiita"という文字が入っているファイルだけ取得したい場合は、where
を使ってこのように表現できるんです
System.IO.Directory.GetFiles("フォルダ名").Where(function(file) file.Contains("qiita")).ToArray
このfunction(file)
のfile
には、直前のSystem.IO.Directory.GetFiles("フォルダ名")
で取得したファイルが1つずつ格納されています。そして、file.Contains("qiita")
で、ファイル名にqiita
と入っているものだけを取得しています。
先程の「特定の拡張子のみ取得」「サブフォルダも含めて取得」と合わせることもできます。合わせるとこんな感じになります↓
System.IO.Directory.GetFiles("フォルダ名", "*.xlsx", System.IO.SearchOption.AllDirectories).Where(function(file) file.Contains("qiita")).ToArray
終わりに
Directory.GetFilesでもっと細かい条件でファイルを取得できるようになれば、もう少し融通の利くファイル操作が出来そうですね!
ぜひ使ってみてください!