見出し画像

ファイルが削除できない

この記事はUiPathブログ発信チャレンジ2023サマーの2日目の記事です。

こんにちは!暑いですね!チョコミントアイス食べたさすぎる!!
やまさきあです。

今回は、UiPathで起こった、ファイルが削除できない事象について書いていこうと思います。

既存ロボットでエラー

ある日、何年も動作させている既存ロボットでエラーが出たと連絡がきたので、ログを見ていました。

ログの内容は、「UnauthorizedAccessException」。
これは、この処理を実施する権限がないときに出現するエラーなのでしょうか。
どうやら、ファイルを削除する「削除」アクティビティで発生しているようです。

原因調査

しかし、特に権限には問題ないみたいです。
また、対象ファイルを手で削除してみても問題なくファイルは消えます。
でもロボットで動作させると毎回しっかり再現するのです。
削除アクティビティを作り直しても同じでした。

比較

エラーが発生する対象ファイルを保存し直してみると、そのファイルに対してはロボットで問題なく削除処理を行うことができました。
そこで、元のファイルと保存しなおしたファイルの2つを比較してみることにしました。

読み取り専用

すると、ある違いがありました。
それは、「読み取り専用」になっていることです。
これが原因でした。

.NetのFile.Delete(String) メソッドのリファレンスにも
パスに読み取り専用ファイルを指定すると、UnauthorizedAccessExceptionが出るといった記載がありました。
File.Delete(String) メソッド (System.IO) | Microsoft Learn

対応

読み取り専用ファイルを使用しないという運用で何とかならないか、ユーザーさんにお願いしてみましたが、難しいとのことだったので、
「コードを呼び出し」アクティビティで、ファイルに対して読み取り専用を外すコードを記載しました。

コードを呼び出し

Dim fi As New System.IO.FileInfo(対象ファイルのパス)
fi.IsReadOnly = False

所感

こう記載してみると、特に大きなことをしたわけではないのですが、
調査の段階で、拡張子が「.doc」のファイルしか事象が発生していなかったため、
「.doc がなにか悪さをしているのではないか!!」
と、
拡張子について調査したり、
「.doc」を「.docx」に変更して保存し直してみたり(※ これで読み取り変更が解除されたため、うまくいったと思い込み、余計に「.doc」疑惑が深まったりした)、
遠回りをして大変でした(^_^;)

エンジニアあるあるですよね!!

でも、「UnauthorizedAccessException 削除」で検索すれば一発で解決策に行き着くので、思い込みをなくすことや検索するワードの選定ってなかなか大事だなと思いました。

これからも、みなさんそれぞれいろんな苦労があると思いますが、
アイスなど食べながら楽しく開発していきましょう(^^)/

以上、ファイルが削除できない事件でした!
読んでいただきありがとうございました~。

♡ やまさきあ ♡

この記事が気に入ったらサポートをしてみませんか?