コピーと削除機能を組み込む

ファイルとフォルダーのコピーと削除機能を組み込みます。
コピーでは受け取り側の更新日付が古いときに上書きを行います。
コピーの進行状況を知らせるために、検索されたファイル名を Status Bar に表示します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

プログラムの説明

  1. WM_COMMAND: に記述するコピーと削除のメニューです。
    IDM_LCOPYX と IDM_RCOPYX は、メニューから呼び出される選択ファイルの強制コピー(普通のコピー)です。
    更新日付によるコピーには、選択されたファイルのコピーと表示中の List View 全体のコピーとがあります。
    ファイルやフォルダーの削除では、削除する前に Message Box で確認を行います。
        case WM_COMMAND:
            switch(LOWORD(wp))
            {   case IDM_LCOPYX:     //選択ファイルを強制コピー
                    App.Copy(g_hListL,L_dir,R_dir,1);
                    App.SetItem(g_hListR,R_dir);
                    break;
                case IDM_RCOPYX:     //選択ファイルを強制コピー
                    App.Copy(g_hListR,R_dir,L_dir,1);
                    App.SetItem(g_hListL,L_dir);
                    break;
                        :
                case IDM_LCOPY:     //選択ファイルを日付でコピー
                    App.Copy(g_hListL,L_dir,R_dir,0);
                    App.SetItem(g_hListR,R_dir);
                    SendMessage(hStatus,SB_SETTEXT,255 | 0,(WPARAM)"Copy End");
                    break;
                case IDM_RCOPY:     //選択ファイルを日付でコピー
                    App.Copy(g_hListR,R_dir,L_dir,0);
                    App.SetItem(g_hListL,L_dir);
                    SendMessage(hStatus,SB_SETTEXT,255 | 0,(WPARAM)"Copy End");
                    break;
                case IDM_LCOPYZ:    //更新日付でコピー
                    App.CopyDir(L_dir,R_dir);
                    App.SetItem(g_hListR,R_dir);
                    SendMessage(hStatus,SB_SETTEXT,255 | 0,(WPARAM)"Copy End");
                    break;
                case IDM_RCOPYZ:    //更新日付でコピー
                    App.CopyDir(R_dir,L_dir);
                    App.SetItem(g_hListL,L_dir);
                    SendMessage(hStatus,SB_SETTEXT,255 | 0,(WPARAM)"Copy End");
                    break;
                case IDM_LDEL:      //選択ファイルを削除
                    id = MessageBox(NULL,"選択ファイルを削除しますか",
                                         "File Handler", MB_OKCANCEL | MB_ICONQUESTION);
                    if (id!=IDOK)   break;
                    App.Del(g_hListL,L_dir);
                    App.SetItem(g_hListL,L_dir);
                    break;
                case IDM_RDEL:      //選択ファイルを削除
                    id = MessageBox(NULL,"選択ファイルを削除しますか",
                                         "File Handler", MB_OKCANCEL | MB_ICONQUESTION);
                    if (id!=IDOK)   break;
                    App.Del(g_hListR,R_dir);
                    App.SetItem(g_hListR,R_dir);
                    break;
        


Filer Object Class の説明

  1. Filer Object Class Header(Filer.h) です。
    追加された関数は、ファイルやフォルダーの削除と複写を行う関数です。
        //★公開部分
        public:
          HWND        hStatus;
    
          Filer();                          //Constructor
          ~Filer();                         //Destructor
          void        InitListView(HWND hList, char dir[]);
          int         SetItem(HWND hList, char dir[]);
          void        SortItems(HWND hList, int col);
          void        SetFullPath(char *dir, char *fullpath);
          HRESULT     Del(HWND hList, char dir[]);
          HRESULT     DelZ(char dir[]);
          HRESULT     Copy(HWND hList, char SDir[], char DDir[], BOOL flag);
          HRESULT     CopyZ(char SDir[], char DDir[], BOOL flag);
          HRESULT     DateChk(char SDir[], char DDir[]);
        
  2. HRESULT Del(HWND hList, char dir[]);
    選択されたファイルを削除する関数(メソッド)です。
    フォルダーの時は、中に格納されている全てのファイルを再帰的に削除して空にしてからフォルダーを削除します。
  3. HRESULT DelZ(char dir[]);
    フォルダーの中に格納されている全てのファイルを再帰的に削除して空にしてからフォルダーを削除します。
    詳細は フォルダーを空にして削除する を参照して下さい。
  4. HRESULT Copy(HWND hList, char SDir[], char DDir[], BOOL flag);
    選択されたファイルをコピーする関数です。
    flag==1 のときは、ファイルの更新日付に関係なくコピーします。
    フォルダーのときは、中に格納されている全てのファイルを再帰的にコピーします。
  5. HRESULT CopyZ(char SDir[], char DDir[], BOOL flag);
    フォルダーの中に格納されている全てのファイルやサブフォルダーを再帰的にコピーします。
    詳細は フォルダーのファイルを列挙するフォルダーを作成する を参照して下さい。
  6. HRESULT DateChk(char SDir[], char DDir[]);
    ファイルの更新日付を調べる関数です。
    TRUE がリターンされたときはコピーが必要で、FALSE のときはコピーは不要です。
    詳細は ファイルサイズと作成日付を表示する を参照して下さい。

[Next Chapter ↓] ダブルクリックやメニューからプログラムを起動
[Previous Chapter ↑] Tool Bar の機能を設定する

超初心者のプログラム入門(Win32API C++)