プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

MFCでディレクトリ削除する。

この記事は2019年08月10日に投稿しました。

f:id:paveway:20190914064630j:plain

目次

  1. はじめに
  2. MFCでディレクトリ削除する
  3. おわりに

1. はじめに

こんにちは、iOSのエディタアプリPWEditorの開発者の二俣です。
今回は業務で使用しているMFCでディレクトリ削除する方法についてです。

目次へ

2. MFCでディレクトリ削除する

MFCでディレクトリ削除するには、RemoveDirectory関数を使用します。
しかしRemoveDirectory関数は、削除するディレクトリ内にサブディレクトリやファイルが存在する場合、削除できません。
そのためディレクトリ内のサブディレクトリやファイルを削除してから、対象のディレクトリを削除する必要があります。

実装例

#include <atlpath.h> // CPathのため必要

/**
 * @brief ディレクトリを削除します。
 *        ディレクトリ内にサブディレクトリやファイルが存在する場合、先にサブディレクトリやファイルを削除します。
 *
 * @param [in] path 削除するディレクトリパス名
 * @return 処理結果(TRUE:成功/FALSE:失敗)
 */
BOOL DeleteDirectory(CString path)
{
    // 対象のディレクトリ
    CFileFind find;
    CPath searchPath(path);
    searchPath.Append(_T("*"));

    // 対象のディレクトリがない場合、終了します。
    if (!find.FindFile(searchPath, 0)) return TRUE;

    // 対象のディレクトリ内のファイルまたはディレクトリが存在する間繰り返します。
    BOOL result = FALSE;
    do
    {
        // ディレクトリ内のファイルまたはディレクトリを取得します。
        result = find.FindNextFile();

        // "."または".."の場合、次を処理します。
        if (find.IsDots()) continue;

        // 対象のパスを取得します。
        CPath targetPath(path);
        targetPath.Append(find.GetFileName());

        // 対象のパスがディレクトリの場合、ディレクトリ内を再帰的に処理します。
        if (find.IsDirectory()) DeleteDirectory(targetPath);

        // 対象のパスがファイルの場合、削除します。
        else ::DeleteFile(targetPath);
    }
    while (result);
    find.Close();

    // 対象のディレクトリを削除します。
    return ::RemoveDirectory(path);
}

API Reference

RemoveDirectory

目次へ

3. おわりに

RemoveDirectory関数でディレクトリを削除しようと思いましたが、サブディレクトリやファイルが含まれる場合、削除でいないようです。
RemoveDirectory関数でサブディレクトリやファイルごと削除できたら、と思います。

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。

目次へ


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688

目次へ