C#でファイルを削除する際にごみ箱に移す方法について紹介します。
C#にはファイルをごみ箱に移す操作を行うクラス、メソッドが用意されていません。
ですのでVisual Basicのアセンブリを使ってごみ箱に移す処理を行います。
目次
Visual Basicのアセンブリを参照する
C#で全角と半角、ひらがなとカタカナの変換を行うために、Visual Basicのアセンブリを参照します。
ソリューション エクスプローラーでアセンブリを追加するプロジェクトのツリーノードを展開します。
展開すると表示されるツリーノードの「参照」を右クリックします。
コンテキストメニューが表示されるので「参照の追加」をクリックします。
「参照マネージャー」ダイアログが表示されますので、左ペインの「アセンブリ」を選択(クリック)し、表示されるアセンブリの一覧から「Microsoft.VisualBasic」を選択(クリック)し「OK」ボタンをクリックします。
アセンブリが参照されると「参照」ノード内に「Microsoft.VisualBasic」が追加されます。
ファイルごみ箱に移す
ファイルをごみ箱に移すには、Visual BasicのMy.Computer.FileSystemオブジェクトのDeleteFileメソッドを使用します。
DeleteFileメソッドの構文
My.Computer.FileSystemオブジェクトのDeleteFileメソッドの構文は次のようになります。
1 2 3 4 5 |
public static void DeleteFile ( string file, Microsoft.VisualBasic.FileIO.UIOption showUI, Microsoft.VisualBasic.FileIO.RecycleOption recycle ); |
DeleteFileメソッドの1つ目のパラメーター(file)には、削除するファイルのパスを指定します。
2つ目のパラメーター(showUI)には、ファイルを削除する際に表示するダイアログボックスの種類をUIOption列挙型で指定します。
UIOption列挙型には「AllDialogs」と「OnlyErrorDialogs」があります。
「AllDialogs」を指定するとプログレスダイアログボックス(進捗ダイアログボックス)およびすべてのエラーダイアログ ボックスを表示します。
「OnlyErrorDialogs」を指定するとエラーダイアログボックスだけを表示し、プログレスダイアログボックスは非表示にします。 既定値です。
3つ目のパラメーター(recycle)には、ファイルをごみ箱に送るために、RecycleOption列挙型の「SendToRecycleBin」を指定します。
DeleteFileメソッドの使用例
My.Computer.FileSystemオブジェクトのDeleteFileメソッドを使って、ファイルをごみ箱に入れるコードは次のようになります。
1 2 3 4 |
// ファイルを削除してごみ箱に入れる string path = @"C:\Test\DeleteFile.txt"; // エラーダイアログのみ表示する FileSystem.DeleteFile(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); |
サンプルプログラム
サンプルとしてWindowsフォームアプリケーションを作成して、ファイルをごみ箱に移すプログラムを作成します。
ユーザーインターフェース
以下のようなフォームを作成します。
フォームには、削除するファイルのパスを指定する「ファイル」テキストボックス(textBox1)と、ファイルを参照する「…」ボタン(button1)と、ごみ箱に移す処理を実行する「button2」ボタンを配置します。
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
using System; using System.Windows.Forms; // System.IOのusingを追加 using System.IO; // Microsoft.VisualBasic.FileIOのusingを追加 using Microsoft.VisualBasic.FileIO; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } // ファイルの参照 private void button1_Click(object sender, EventArgs e) { try { // ファイルを開くダイアログボックスのインスタンスを生成 using (OpenFileDialog dlg = new OpenFileDialog()) { // テキストボックスからファイルパスを取得 string path = textBox1.Text; if (!string.IsNullOrEmpty(path)) { // FileInfoオブジェクトを生成 FileInfo fileInfo = new FileInfo(path); // ディレクトリパスを取得 string directoryName = fileInfo.DirectoryName; // ディレクトリが存在するかどうかを確認 if (Directory.Exists(directoryName)) { // ディレクトリが存在する場合は // ファイルを開くダイアログボックスの初期ディレクトリに設定 dlg.InitialDirectory = directoryName; } } // ダイアログボックスを表示 if (dlg.ShowDialog(this) == DialogResult.Cancel) { // キャンセル時は終了 return; } // 指定されたファイルパスをテキストボックスに設定 textBox1.Text = dlg.FileName; } } catch (Exception ex) { MessageBox.Show(ex.Message); } } // ファイルの削除(ごみ箱に移す) private void button2_Click(object sender, EventArgs e) { try { // テキストボックスからファイルパスを取得 string path = textBox1.Text; // FileInfoオブジェクトを生成 FileInfo fileInfo = new FileInfo(path); // ファイルの存在確認 if (!fileInfo.Exists) { MessageBox.Show($"{path} が見つかりませんでした。"); return; } // ファイルをごみ箱に移動 FileSystem.DeleteFile( path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin ); // メッセージを表示 MessageBox.Show($"{path} を削除しました。"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } } |
プロジェクトの実行
プロジェクトを実行します。
「ファイル」テキストボックスに削除するファイルのパスを入力するか、「…」ボタンをクリックしてファイルを開くダイアログボックスから設定します。
上記の例では「C:\Test\DeleteFile.txt」を指定しています。
「button2」をクリックします。
ファイルがごみ箱に入り(削除され)メッセージが表示されます。