ディレクトリ(フォルダ)を削除するには

解説

Win32API に RemoveDirectory という関数がありますが、この関数は、「空のディレクトリを削除します。」となっていて、空でないディレクトリの削除はできません。

ディレクトリが空かどうかによらず、そのディレクトリを削除する関数は今のところ標準では用意されていないので、自作します。

実装方法としては、
・ディレクトリの中を空にする処理を作成する方法
・シェル関数を用いる方法
の2つの実装方法があります。(他にもあるのかもしれません。)

ディレクトリの中を空にする処理を作成する方法の実装内容としては、

  1. 削除しようとするディレクトリ内のすべてのファイルおよびディレクトリを検索します。
  2. ファイルならば DeleteFile を用いて削除し、ディレクトリならば本関数を再起的に呼び出して削除します。
  3. ディレクトリが空になったところで、RemoveDirectory を用いて、ディレクトリを削除します。

シェル関数を用いる方法の実装内容としては、

  1. シェル関数の仕様に従い、削除するディレクトリ名の終端を"\0\0"にします。
  2. シェル関数はエクスプローラが行う処理を実行するAPIなので、エクスプローラでディレクトリの削除を行うときに出るダイアログが出ないようにフラグを設定します。
  3. シェル関数を呼び出し、ディレクトリの削除を行います。

サンプルコード

ダウンロード

ヘッダーファイルとソースファイル

サンプルプロジェクト