ファイルのバックアップ作成や、処理済みファイルの移動、不要なログの削除など、ファイルシステムへの操作は 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引数の overwrite を true にすると、コピー先に同名のファイルが存在していても強制的に上書きします。false(デフォルト)の場合、同名ファイルがあると IOException が発生します。
2. File.Delete (削除)
File.Delete(path) メソッドを使用します。 指定したパスのファイルを完全に削除します。ゴミ箱には入らないため、復元はできません。使用には注意が必要です。なお、ファイルが存在しない状態で呼んでもエラーにはならず、単に無視されます。
3. File.Move (移動・リネーム)
File.Move(source, dest) メソッドを使用します。 ファイルを別のディレクトリに動かす「移動」だけでなく、同じディレクトリ内で名前を変える「リネーム」にも使用されます。 .NET Core 3.0以降であれば、第3引数に overwrite: true を指定して、移動先にファイルがあっても上書き移動させることが可能です。
