【C#】ファイルのコピー・移動・削除を行う (Fileクラスの基本操作)

ファイルのバックアップ作成や、処理済みファイルの移動、不要なログの削除など、ファイルシステムへの操作は System.IO.File クラスの静的メソッドを使用して行います。

これらの操作を行う際は、対象のファイルが存在しない場合や、移動先に同名のファイルが既にある場合に例外(エラー)が発生しやすいため、事前に File.Exists で確認を行うのが定石です。

目次

実装サンプル:日報ファイルのバックアップと復元

以下のコードでは、「日報ファイル(DailyReport.csv)」が存在する場合はバックアップフォルダにコピーして元のファイルを削除し、逆に元ファイルがなくバックアップがある場合は、バックアップから復元(移動)させる処理を行っています。

サンプルコード

using System;
using System.IO;

public class Program
{
    public static void Main()
    {
        // 操作対象のファイルパス
        string currentDir = Directory.GetCurrentDirectory();
        string sourceFile = Path.Combine(currentDir, "DailyReport.csv");
        
        // バックアップ先のパス
        string backupDir = Path.Combine(currentDir, "Backup");
        string backupFile = Path.Combine(backupDir, "DailyReport_Bak.csv");

        // (準備) バックアップ用フォルダがない場合は作成しておく
        if (!Directory.Exists(backupDir))
        {
            Directory.CreateDirectory(backupDir);
        }

        // ---------------------------------------------------------
        // ケース1: 元ファイルがある場合 -> バックアップを取って削除
        // ---------------------------------------------------------
        if (File.Exists(sourceFile))
        {
            Console.WriteLine("[処理開始] 元ファイルが見つかりました。バックアップを作成します。");

            // 1. ファイルをコピー (コピー元, コピー先, 上書き許可フラグ)
            // overwrite: true にすると、同名ファイルがあっても上書きします
            File.Copy(sourceFile, backupFile, overwrite: true);
            Console.WriteLine($"コピー完了: {Path.GetFileName(backupFile)}");

            // 2. 元ファイルを削除
            File.Delete(sourceFile);
            Console.WriteLine("元ファイルを削除しました。");
        }
        // ---------------------------------------------------------
        // ケース2: 元ファイルがなく、バックアップがある場合 -> 復元
        // ---------------------------------------------------------
        else if (File.Exists(backupFile))
        {
            Console.WriteLine("[処理開始] 元ファイルがありません。バックアップから復元します。");

            // 3. ファイルを移動(リネームも兼ねる)
            // Move(移動元, 移動先)
            File.Move(backupFile, sourceFile);
            Console.WriteLine($"復元完了: {Path.GetFileName(sourceFile)}");
        }
        else
        {
            Console.WriteLine("[エラー] 対象のファイルがどこにもありません。");
            
            // テスト用にファイルを作成しておく
            File.WriteAllText(sourceFile, "2025-12-25, 異常なし");
            Console.WriteLine("テスト用ファイルを作成しました。再実行してください。");
        }
    }
}

実行結果(1回目:ファイルがある場合)

[処理開始] 元ファイルが見つかりました。バックアップを作成します。
コピー完了: DailyReport_Bak.csv
元ファイルを削除しました。

実行結果(2回目:ファイルがない場合)

[処理開始] 元ファイルがありません。バックアップから復元します。
復元完了: DailyReport.csv

解説と技術的なポイント

1. File.Copy (コピー)

File.Copy(source, dest, overwrite) メソッドを使用します。 第3引数の overwritetrue にすると、コピー先に同名のファイルが存在していても強制的に上書きします。false(デフォルト)の場合、同名ファイルがあると IOException が発生します。

2. File.Delete (削除)

File.Delete(path) メソッドを使用します。 指定したパスのファイルを完全に削除します。ゴミ箱には入らないため、復元はできません。使用には注意が必要です。なお、ファイルが存在しない状態で呼んでもエラーにはならず、単に無視されます。

3. File.Move (移動・リネーム)

File.Move(source, dest) メソッドを使用します。 ファイルを別のディレクトリに動かす「移動」だけでなく、同じディレクトリ内で名前を変える「リネーム」にも使用されます。 .NET Core 3.0以降であれば、第3引数に overwrite: true を指定して、移動先にファイルがあっても上書き移動させることが可能です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次