特定フォルダ内にあるファイル名を全て取得

標記の件について質問させてください。

特定のフォルダ内にあるファイル(pdf.word)名を拡張子を除いて
全て取得する方法を考えております。
(その後、取得したデータを1件ずつ別データに登録)

最初はAssign「fileList = Directory.GetFiles(“path”)」を使用してからfor eachを使用することを
想定していましたが、取得できたのはファイル名ではなく格納先のパスだったので、
何か他に良い方法はないでしょうか。

Dim target As String = My.Computer.FileSystem.SpecialDirectories.MyDocuments
Dim pdfFileNames As String() = Directory.EnumerateFiles(target, “*.pdf”, SearchOption.AllDirectories).Select(AddressOf Path.GetFileNameWithoutExtension).ToArray()

色々と調べて上記コードを組み、アクティビティの「Invoke code」を
使用してみましたが、、エラーとなってしまいます。

VB.netをUipathで処理するときは、どのようにすればよろしいでしょうか。
イマイチ伝わりづらいかもしれませんが、何卒宜しくお願いします。
また、処理方法にこだわりはないので、Uipathに

あるアクティビティのみで解決できるようでしたら、
それでも問題ございません。

こんにちは

こんな感じでしょうか?
sample.xaml (7.4 KB)

vb.net の話になりますが、
Directory.GetFiles 命令は パス名を含んだファイル名(拡張子付)の文字列が全て取得されます。

Returns the names of files (including their paths) in the specified directory.

なので、

取得できたのはファイル名ではなく格納先のパスだったので

この一文が、やや謎です。取得した文字列が長くてファイル名を見落としたのか・・・。
取得した文字列配列を [For Each]で回しつつ、Path.GetFileNameWithoutExtension を使うことで拡張子抜きのファイル名だけ取得できると思われます。

御二方、回答ありがとうございました。

真似をしてコードを組んでみたところ、上手く抽出出来ました。
同じ要領で、拡張子のみの取得も出来ました。

すみません、1つめのファイルはそれぞれ上手く変数を取得できたのですが、
2つめを処理しようとすると、何故かファイル名が「Thumbs.db」と認識されてしまいます。
(3つめ以降は、問題なく取得できているようです)

原因分かりますでしょうか。
ちなみに、フォルダ内にはpdf,doc,docxなど、様々な種類のファイルが格納されています。%E7%84%A1%E9%A1%8C2 %E7%84%A1%E9%A1%8C3

こんにちは

この画像だけですとよくわかりませんので、ワークフローのファイル(xaml)を共有できませんか?

あるいはご質問の意図は「エクスプローラー上で表示されていないThumbs.dbというファイルが出てくるのは何故か?」ということでしょうか?それならば、このファイルは隠しファイルとして存在していて設定によっては見えないのですが実際には存在するから、というのが答えになります。

1 Like

Thumbs.dbは @Yoichi さんが書かれているように隠しファイル(画像のサムネイル等に関係するものです)で、それが表示されているだけなので、それはそれとして。

そもそもの目的というか、ファイル名だけを取得する処理の後、何をしようと思っているかで、どのようにWorkflowを組むべきか、現状で良いのか、という点が変わってくると思います。
言うまでもなくファイルの種類によって「できる処理」は異なりますから、一括で表示するよりは、既知の拡張子ごとに検索するようなロジックのほうが良いのではないでしょうか、と感じるのです。

回答ありがとうございます。
以下、サンプルデータです。

コピー.xaml (29.7 KB)

処理内容としては、まず特定フォルダ内に格納してある複数のファイル(pdf,doc,xlsなど)を取得します。拡張子を外しているのは、ファイル名が社員番号となっているためです。
次に、取得したファイル名を使用してデータベースにアクセスし、そのファイルをそのままアップロードしています。
ここで初めてアップロードするファイルの拡張子が必要になります(フォルダのパスを使用するため)

説明が下手ですみません。伝わりましたでしょうか。
windowsの「ユーザーの構成」-「管理用テンプレート」-「Windowsコンポーネント」-「エクスプローラ」でthumbs.dbファイルを作成しないように設定してみましたが、上手くいきませんでした。

やや力技ですが、自己解決しました。
アクティビティの分岐で、拡張子DBの場合はスルーするようにしました。

%E7%84%A1%E9%A1%8C

「そこまでする必要があるか」は運用によっても変わるのですが、想定外の動作を防ぐことを念頭に置くなら、全てのファイルよりは既知の拡張子(たとえば「.doc(.docx)、.xls(.xlsx)、.pdfだけ」のような)に限定するほうが安全かと思います。

特定の拡張子だけを検索するパターン(かつ、その中でファイル名の拡張子なしの部分のみ取り出す方法)のサンプルを作成してみましたので、参考にしてみてください。
(UiPath Community Editionの18.3で作成しています。18.2.xだと開けないかもしれませんが……)Main.xaml (9.5 KB)

Honoka 様

回答ありがとうございます。確かに、取り込みファイルの保存形式は決まっているので、
予め拡張子は指定しておいたほうが良いかも知れません。
共有頂いたサンプルを開いてみましたが、初めて見るエラーが出ておりました。
バージョンの違いによるエラーでしょうか。それとも、別のアクティビティをダウンロードする必要があるのでしょうか。

また、フォルダの指定先を変更したら、別のエラーも出てしまいました。

%E7%84%A1%E9%A1%8C3

バージョン違いによるエラーですね……こればかりはちょっと自宅環境からだと現状どうにもならないので、何とか考えてみます。ごめんなさい。

(18.2のWorkflowを18.3で開くことはできるのですが、逆はできないです。機能追加などもあるので仕方ないのですが)

今更ですが、xamlファイル内の以下コードを削除することで
旧バージョンでもファイルの読み込みが可能になります。

CurrentIndex="{x:Null}"

1 Like