0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Directory.Move で「アクセスが拒否されました」と出る意外な落とし穴

Posted at

はじめに

C#でDirectory.Moveを使ってフォルダを移動しようとした際、
アクセスが拒否されました」という例外が発生することがあります。

System.IO.IOException: Access to the path is denied.

ファイルやフォルダの権限を確認しても問題がないのになぜか移動できない…
その原因は、Windowsエクスプローラーでフォルダを開いているだけという意外な落とし穴でした。

原因

Windowsでは、エクスプローラーでフォルダを開いているだけで、
そのフォルダにロックがかかることがあります。
特に以下のような状況では、Directory.Moveが失敗する可能性があるようです。

・フォルダをエクスプローラーで開いている
・フォルダ内のファイルをプレビューしている(画像、PDFなど)
・サムネイル表示が有効になっている
・フォルダに対して他のプロセスがアクセスしている(検索インデックスなど)

対策

当たり前ですが、実行前に対象フォルダを開いているエクスプローラーウィンドウをすべて閉じましょう。
もしくはファイル単位での移動方法に実装を変更するのもありです。

※他にもファイルロックを確認するツールの私用やリトライ処理を入れる対策もありますが、運用で解決できるのであれば私は不要かなと思います。

さいごに

Directory.Moveで「アクセスが拒否されました」と出たら、
まずはエクスプローラーを閉じることを試してみましょう。
意外と見落としがちなポイントですが、これだけで解決することも多いと思います。
※自分の場合、フォルダ内のファイルをいちいち変えてテストしていたので完全に開きっぱでした…

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?