[C#] 「Directory.Delete(path, true)」で第二引数がtrueでもフォルダが削除できない場合がある

エラー

おぼえがき

Directory.Delete(path, true)を実行したらPathは以下にファイルがあった場合でも
System.IO.IOException: The directory is not empty.が発生する

ごくまれに第二引数を指定してても発生する可能性がある対策としては以下に紹介する対応状況に陥らないように制御するかリトライ設定を入れるかになるとおもう。

発生条件

  1. ディレクトリまたはその内容が別のプロセスによって使用中である場合、削除できなくなる可能性がある。これにより、ディレクトリがまだ空でないというエラーが発生します。
  2. ファイルまたはディレクトリに対する適切なアクセス許可がない場合、それらを削除することはできません。これにより、同様のエラーが発生する可能性があります。
  3. ファイルが読み取り専用属性を持っている場合、それを削除するとエラーが発生します。

対応

①リトライ設定入れる

②フォルダが決まっている場合はその配下に権限を付与しておく

③Directory.Delete(path, true)を使用しないでフォルダの中のファイルを再帰的に検索して削除してそれが完了後にフォルダを削除する。

参考サイト: Stack Overflow => https://stackoverflow.com/questions/329355/cannot-delete-directory-with-directory-deletepath-true

タイトルとURLをコピーしました