Posted at

【UiPath】Directory.GetFilesでもっと細かい条件でファイル取得したい場合

UiPathで特定のフォルダ内のファイルを一括取得したいときにSystem.IO.Directory.GetFiles("ファイル名")という構文を使う人は多いのではないでしょうか!

しかし、特定のフォルダ内の特定の条件に当てはまるファイルだけとりたいんだー!!というときもあります。

今回はそれの対応策についてお話します。


とりあえずよく使うあるあるのやり方たち

もしかしたらご存知の方も多いかもしれませんが、少々お付き合いください...!


サブフォルダに入っているファイルも全部取得したいとき

普通にSystem.IO.Directory.GetFiles("フォルダ名")を使うと、サブフォルダのファイルは取得できません。指定したディレクトリ内のファイルしか取れません。

サブフォルダに入っているファイルも全部取得したいときは、このように使います。

System.IO.Directory.GetFiles("フォルダ名", "*", System.IO.SearchOption.AllDirectories)

image.png


特定の拡張子のファイルだけ取得したいとき

例えばExcelのファイルだけ取得したい場合は、.xlsxの拡張子のファイルだけ取得すればいいですよね!

というわけで、例えば.xlsxの拡張子のファイルだけ取得するには以下の構文が使えます。

もちろん、.txtでも.docでも同じようにすればできます!

System.IO.Directory.GetFiles("フォルダ名", "*.xlsx")

image.png

また、先ほどのサブフォルダも全部ファイル取得するコードと組み合わせて以下のようにすることもできます。


System.IO.Directory.GetFiles("フォルダ名", "*.xlsx", System.IO.SearchOption.AllDirectories)


もっと柔軟に条件つけてファイル取得したい!!

そうですよね、特定の拡張子だけ取得したい場合や、サブフォルダも全てファイルを取得したい場合もあると思いますが、もっと柔軟に条件つけてファイルしたいときもありますよね。

例えば、"qiita"という文字が入っているファイルだけ取得したい場合は、whereを使ってこのように表現できるんです


System.IO.Directory.GetFiles("フォルダ名").Where(function(file) file.Contains("qiita")).ToArray

image.png

この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

image.png


終わりに

Directory.GetFilesでもっと細かい条件でファイルを取得できるようになれば、もう少し融通の利くファイル操作が出来そうですね!

ぜひ使ってみてください!