USBメモリ内のファイル削除について

DeleteアクティビティのパスにF:¥を指定して実行すると、結果としてUSBメモリ内のファイルは削除されるものの、Deleteアクティビティが正常に終了しません。これはなぜでしょうか?

正常に終了しない、というのは例外が発生している状態でしょうか?
エラーのメッセージなどをご共有いただけますとより具体的なアドバイスが出来るかと思います。

このような内容です。

ありがとうございます。
ワークアラウンドとして、「例外は発生するが、ファイルは削除される」ということですので、例外を無視する(Try-catchで囲み、CatchにはSystem.UnauthorizedAccessExceptionを設定する)のはいかがでしょうか。

ありがとうございます。
追加で質問させていただきますが、Deleteアクティビティのプロパティでエラー発生時に実行を継続をTrueに設定するのとTry-catchではなにか違いがありますか?

ContinueOnError の場合は、実行は継続されますがどのようなエラーが発生したのかが確認できないため、エラーの内容を確認したいシーンでは向きません。またエラーによって処理を分岐させることが出来ないこと、アクティビティの配置画面上ではContinueOnErrorのステータスが見えないため見逃しが起きやすいことも、個人的にはデメリットだと思っています。しかしながら上記デメリットが許容できる程度であれば、使用自体は問題ないと思います。
Try-catch の場合には、アクティビティ数が増えますし一定の理解が必要ではありますが、エラーの内容を分析して処理を分岐させることができたり、配置画面上でもエラー処理を実装していることがひと目で分かるというメリットがあります。

1 Like

ありがとうございます。
勉強になりました。

1 Like

こんにちは

既に解決済みですが..

Deleteアクティビティの内部仕様詳細がわかりませんが、おそらく内部的に削除処理される順番を実装側で制御することは難しいと思います。
そのため今回は不具合の発生するファイルへの処理が最後になったため問題はないようですが、仮にDeleteアクティビティが不具合の発生するファイルを最初に削除しようとした場合、Deleteアクティビティ全体でのTry catchやContinue on error=trueでは、内部の後続の処理が実行されず、結果として削除できないファイルが残ることへの懸念があります。

そのためアプローチとしては以下のいずれかを検討したほうが良いように思えます。
1.問題なっているファイルの状態の確認と原因の除去
可能性としては、当該ファイルが読み取り専用属性になっている、他のプログラムが使用中、アクセス権の問題
等が考えられますので、これらを解決します。

2.1ファイル単位、1ディレクトリ単位での削除
1が難しければ、ファイルやディレクトリを1つづ削除するようにします。
仮に削除できないものがあれば、try catchなどでスキップします。

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.