コピーを実装

File Handler にコピー機能と削除機能を実装します。

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

コピー機能を実装

  1. メニューの設定が終わったので、各種機能を実装して行きましょう。
    最初はコピー機能を実装します。
    メニューを作成したときに「日付でコピー(Copy)」と「上書コピー(Zcopy)」のメソッドが定義されています。
    日付でコピーでは、送り側と受取側の更新日付を比べて、新しい日付のファイルをコピーします。
    上書コピーでは、送り側から受取側に無条件でコピーします。
    またファイルだけで無く、フォルダのコピーも考慮しなければなりません。
  2. メニューから呼び出されるコピーメソッドです。
    パラメータが true のときは、無条件にコピーします。
        // 日付でコピーする
        private void Copy(object sender, EventArgs e)
        {   Copy_Call(false);  }
    
        // 上書コピーする
        private void Zcopy(object sender, EventArgs e)
        {   Copy_Call(true);   }
    
  3. Copy_Call() メソッドでは、クリップボードに登録されている名前を取得します。
    名前がファイル名のときは File_Copy() を、フォルダ名のときは Folder_Copy() を呼び出します。
    これらの関数は Folder Copy を参照して下さい。
        private void Copy_Call(bool flg)
        {
            string  str,strout;
            System.Collections.Specialized.StringCollection files = Clipboard.GetFileDropList();
            foreach(string fileName in files)
            {
                str= fileName;
                strout= Sel_Dir + "\\" + Path.GetFileName(str);
                if (File.Exists(str))   File_Copy(str,strout,flg);
                else    Folder_Copy(0,str,strout,flg);
            }
            ViewReset();
        }
    
  4. コピーが終わると ListView を最新の情報に更新します。
        private void ViewReset()
        {
            SetList(Sel_Dir);
            if (listView1.Items.Count >= 1)
            {
                listView1.Items[0].Selected = true;
                listView1.Items[0].Focused = true;
            }
        }
    
  5. これで Windows Explorer と相互に Copy&Paste が出来るようになります。
    Explorer でコピーしたファイルが「日付でコピー」「上書コピー」でコピーされることを確かめて下さい。
    また Tool Bar のコピーアイコンをクリックしても更新日付でコピーされます。

ゴミ箱を実装

  1. フォルダーやファイルを削除する機能を実装します。
    Windows の一般的な削除の方法は、ゴミ箱に移動することです。
    完全な削除と違い、削除した後でも必要になればゴミ箱から拾い出すことが出来ます。 (^_^;)
    ゴミ箱に移動するときは Microsoft.VisualBasic.dll を組み込みます。
    ソリューション・エクスプローラーで「参照設定」を右クリックして「参照の追加」から選択して下さい。
    メニューを作成したときに「ゴミ箱(DustBox)」のメソッドが定義されています。
  2. メニューから呼び出されるゴミ箱メソッドです。
    クリップボードを参照して名前を取得します。
    フォルダのときは DeleteDirectory() を、ファイルのときは DeleteFile() を呼び出します。
    処理が終わると ListView を最新の情報に更新します。
        private void DustBox(object sender, EventArgs e)
        {
            string  str;
            System.Collections.Specialized.StringCollection files = Clipboard.GetFileDropList();
            foreach(string fileName in files)
            {
                str= fileName;
    Console.WriteLine("Dust Box: " + str);
                if (Directory.Exists(str))  //ディレクトリ
                {   FileSystem.DeleteDirectory(str,UIOption.AllDialogs,RecycleOption.SendToRecycleBin);
                }
                else                        //ファイル
                {   FileSystem.DeleteFile(str,UIOption.OnlyErrorDialogs,RecycleOption.SendToRecycleBin);
                }
            }
            ViewReset();
        }
    

削除機能を実装

  1. フォルダーやファイルを完全に削除するメソッドを実装します。
    完全に削除とは言っても実質的には削除フラグを設定するだけなのですが、元に戻すには専用のソフトとそれなりの知識が必要です。
    メニューを作成したときに「削除(Delete)」のメソッドが定義されています。
  2. メニューから呼び出される削除メソッドです。
    ClipList() でクリップボードから一覧を取得して、削除の確認を行います。
    削除するときは、クリップボードからファイル名(フォルダ名)を取得します。
    フォルダのときは Folder_Delete() を、ファイルのときは File_Delete() を呼び出します。
    これらの関数は Folder Delete を参照して下さい。
    コピーが終わると ListView を最新の情報に更新します。
        private void Delete(object sender, EventArgs e)
        {
            string  str;
            DialogResult rc;
    
            ClipList();
            rc= MessageBox.Show(Buf,"完全に削除しますか",
                MessageBoxButtons.YesNo,MessageBoxIcon.Question);
            if (rc != DialogResult.Yes) return; 
            System.Collections.Specialized.StringCollection files = Clipboard.GetFileDropList();
            foreach(string fileName in files)
            {
                str= fileName;
    Console.WriteLine("Delete: " + str);
                if (Directory.Exists(str))      //ディレクトリが存在
                    Folder_Delete(str);
                else    File_Delete(str);
            }
            ViewReset();
        }
    
  3. クリップボードから一覧を取得して Buf に格納する ClipList() メソッドです。
    Buf の領域を定義しておいて下さい。
        public string   Buf = "";           //選択アイテム一覧
            ・・・
        private void ClipList()
        {
            Buf = "";
            System.Collections.Specialized.StringCollection files = Clipboard.GetFileDropList();
            if (files.Count == 0)
            {
                MessageBox.Show("ClipBord が空です", "Error");
                return;
            }
            foreach(string fileName in files)
            {   Buf += fileName + "\r\n";  }
        }
    
  4. これでファイルやフォルダの削除ができるようになります。
    削除したファイルやフォルダは元に戻すことは出来ないので、紛失しないように注意して下さい。

[Next Chapter ↓] 表示メニューを実装
[Previous Chapter ↑] Handler Menu

超初心者のプログラム入門(C# Frame Work)