ファイルを削除する [C#]
C#でファイルを削除する方法について紹介します。
ファイルの削除には、System.IO名前空間のFileInfoクラスのDeleteメソッドを使用するか、FileクラスのDelete静的メソッドを使用します。
目次
FileInfoクラスのDeleteメソッドで削除
FileInfoクラスのDeleteメソッドの構文は次のようになります。
1 |
public override void Delete (); |
Deleteメソッドでは削除するファイル(FileInfoクラスに指定されているファイル)が存在していなくても例外(エラー)は発生しません。Deleteメソッドはファイルが存在しない場合には何もせずに処理が終わります。
FileInfo.Deleteメソッドの使用例
以下にDeleteメソッドの使用例を示します。
1 2 3 4 5 6 |
// ファイルパス string path = @"C:\Test\CreateFile.txt"; // FileInfoのインスタンスを生成する FileInfo fileInfo = new FileInfo(path); // ファイルを削除する fileInfo.Delete(); |
上記の例では以下の記事「ファイルを作成する」で作成するファイルのC:\Test\CreateFile.txtファイルを削除しています。
Deleteメソッドでは削除するファイル存在しなくても例外(エラー)は発生しませんが、指定したファイルのパスがフォルダー(ディレクトリ)として存在する場合は例外を発生させます。
Deleteメソッドでファイルを削除する場合は、指定したパスがフォルダー(ディレクトリ)として存在しないかどうかを確認してから実行した方が安全です。
1 2 3 4 5 6 7 8 9 |
// ファイルパス string path = @"C:\Test\CreateFile.txt"; if (!Directory.Exists(path)) { // FileInfoのインスタンスを生成する FileInfo fileInfo = new FileInfo(path); // ファイルを削除する fileInfo.Delete(); } |
FileクラスのDelete静的メソッドで削除
FileクラスのDelete静的メソッドの構文は次のようになります。
1 |
public static void Delete (string path); |
FileクラスのDelete静的メソッドもFileInfoクラスのDeleteメソッドと同じように使用します。
引数のpathには削除するファイルのパスを指定します。
File.Delete静的メソッドの使用例
以下にDelete静的メソッドの使用例を示します。
1 2 3 4 |
// ファイルパス string path = @"C:\Test\CreateFile.txt"; // ファイルを削除する File.Delete(path); |
FileクラスのDelete静的メソッドも削除するファイルがない場合でも例外は発生させません。
FileInfoクラスのDeleteメソッド、FileクラスのDelete静的メソッドともに、ファイルの読み取り専用属性が設定されていると「
System.UnauthorizedAccessException: ‘パス ‘○○○○○’ へのアクセスが拒否されました。’」という例外が発生します。
これを回避するためには削除するファイルの読み取り専用属性を変更してから削除する必要があります。
以下に読み取り専用を変更するコードの例を示します。
1 2 3 4 5 6 7 8 9 10 |
// ファイルの読み取り専用属性を削除 private void RemoveReadonlyAttribute(FileInfo fileInfo) { // 削除するファイルの読み取り専用属性を確認 if ((fileInfo.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { // 読み取り専用属性を削除 fileInfo.Attributes &= ~FileAttributes.ReadOnly; } } |
上記のメソッドではファイルの属性を参照して、読み取り専用属性がある場合に削除しています。このメソッドをファイルを削除する処理の前に呼び出してやることで、読み取り専用属性のファイルを削除することができます。
サンプルプログラム
Windowsフォームアプリケーションでのプログラムの実装例を記載します。
ユーザーインターフェース
フォームのインターフェースは次のようにします。
「…」ボタン(button1)をクリックすると、ファイルを開くダイアログを表示して、ファイルパスをテキストボックス(textBox1)に設定できるようにします。
「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 89 90 91 92 93 94 95 96 |
using System; using System.Windows.Forms; // System.IOのusingを追加 using System.IO; 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; } // ファイルの読み取り専用属性を削除 RemoveReadonlyAttribute(fileInfo); // ファイルを削除 fileInfo.Delete(); // メッセージを表示 MessageBox.Show($"{path} を削除しました。"); } catch (Exception ex) { MessageBox.Show(ex.Message); } } // ファイルの読み取り専用属性を削除 private void RemoveReadonlyAttribute(FileInfo fileInfo) { // 削除するファイルの読み取り専用属性を確認 if ((fileInfo.Attributes & FileAttributes.ReadOnly) == FileAttributes.ReadOnly) { // 読み取り専用属性を削除 fileInfo.Attributes &= ~FileAttributes.ReadOnly; } } } } |
サンプルの実行
作成したプログラムを実行します。
「C:\Test」フォルダーに「DeleteFile.txt」ファイルを作成します。
パスのテキストボックスに「C:\Test\DeleteFile.txt」を入力するか、「…」ボタンをクリックして、ファイルを開くダイアログボックスを表示して「DeleteFile.txt」ファイルを選択します。
[button2]をクリックします。
メッセージが表示され、ファイルが削除されます。