実はUiPathで読み取り専用ファイルを削除する場合、Deleteアクティビティだけでは削除できない。これは、.NETが読み取り専用ファイルを削除できない仕様になっているからである。
試しに、読み取り専用ファイルをDeleteアクティビティのみで削除してみる
1.読み取り専用ファイルの準備
2.読み取り専用ファイルを削除するアクティビティを準備
以下の通り、DeleteFileアクティビティで1.で準備したファイルを削除してみる。
3.エラー発生
このように、通常、右クリック>削除できるファイルでもUiPathでは、エラーではじかれてしまう。
4.回避策
Invoke Codeを用いて、以下のコードを入力する。
File.SetAttributes(“ファイルフルパス”, FileAttributes.Normal)
File.SetAttributes("ファイルフルパス", FileAttributes.Normal)
は、指定されたファイルの属性を設定するためのコード。
具体的には、このコードの意味は以下の通り
-
File.SetAttributes
:-
System.IO.File
クラスの静的メソッドで、ファイルの属性を設定する
-
-
"delete-me.txt"
:- 属性を設定する対象のファイル名です。この場合、カレントディレクトリにある「delete-me.txt」ファイルの属性が設定される
-
FileAttributes.Normal
:- ファイルの属性を
Normal
(通常)に設定します。この属性は、ファイルが特別な属性(読み取り専用、隠しファイル、システムファイルなど)を持たないことを意味する
- ファイルの属性を
簡単にまとめると:
このコードは、"delete-me.txt"というファイルの属性を通常の状態(特別な属性が付いていない状態)にリセットする。たとえば、ファイルが以前に「読み取り専用」や「隠しファイル」などの属性を持っていた場合、このコードを実行することで、それらの属性が解除される。
5.改善後の処理結果
一度、削除対象のファイルを通常に戻して、削除したことで処理は正常に終了した。
処理結果
6.まとめ
今回の事象は読み取り専用ファイルでも削除はできるだろうという思い込みから、発生したバグだが、こういったことは要件定義の段階から懸念するべきなので、些細な事でも実際に動かしてから回答するように心がけようと思った。