ファイルだけでなく、ディレクトリ(フォルダ)自体の管理も System.IO.Directory クラスの静的メソッドで行います。
特に CreateDirectory メソッドは、指定したパスの途中にあるフォルダ(親フォルダ)が存在しない場合、それらも含めて一気に作成してくれる非常に便利な機能を持っています。
目次
実装サンプル:プロジェクトフォルダの整理
以下のコードでは、プロジェクト用の作業フォルダを管理するシナリオを実装しています。 既存のフォルダがあれば一旦削除して作り直し(リセット)、最後にフォルダ名を変更してアーカイブする、という一連の流れです。
サンプルコード
using System;
using System.IO;
public class Program
{
public static void Main()
{
// 操作対象のディレクトリパス
// 深い階層を指定しても自動的に処理されます
string workDir = Path.Combine("Projects", "2025", "WorkSpace");
string archiveDir = Path.Combine("Projects", "2025", "Finished_Project");
Console.WriteLine($"作業フォルダ: {workDir}");
// 1. 存在確認 (Directory.Exists)
if (Directory.Exists(workDir))
{
Console.WriteLine("既存のフォルダが見つかりました。クリーンアップします...");
// 2. ディレクトリの削除 (Directory.Delete)
// 第2引数 recursive: true にすると、中のファイルやサブフォルダごと削除します
// falseの場合、中身が空でないとエラーになります
Directory.Delete(workDir, recursive: true);
Console.WriteLine("削除完了。");
}
else
{
Console.WriteLine("フォルダはまだありません。");
}
// 3. ディレクトリの作成 (Directory.CreateDirectory)
// Projectsフォルダや2025フォルダがなくても、自動的にすべて作成されます
Directory.CreateDirectory(workDir);
Console.WriteLine("新規フォルダを作成しました。");
// 中にダミーファイルを作ってみる
File.WriteAllText(Path.Combine(workDir, "readme.txt"), "Project Data");
// 4. ディレクトリの移動・リネーム (Directory.Move)
// 移動先に同名のフォルダがあるとエラーになるため、事前チェック推奨
if (!Directory.Exists(archiveDir))
{
Directory.Move(workDir, archiveDir);
Console.WriteLine($"フォルダ名を変更(移動)しました: \n -> {archiveDir}");
}
}
}
実行結果
作業フォルダ: Projects\2025\WorkSpace
フォルダはまだありません。
新規フォルダを作成しました。
フォルダ名を変更(移動)しました:
-> Projects\2025\Finished_Project
解説と技術的なポイント
1. Directory.CreateDirectory
非常に強力なメソッドで、mkdir -p (Linux) のように、指定されたパスに必要なすべてのディレクトリ階層を作成します。すでに存在している場合は何もせず、エラーにもなりません。
2. Directory.Delete の再帰削除
Directory.Delete(path, true) を指定すると、中身が入っているフォルダを強制的に削除できます。 注意: 誤って重要な親フォルダ(例:C:\Windowsなど)を指定してしまうと、システムに甚大な被害を与えるため、パスの指定には細心の注意が必要です。
3. Directory.Move
フォルダの場所を変える「移動」と、名前を変える「リネーム」は同じこのメソッドで行います。
- 制限: 移動先のパスに、既に同名のフォルダが存在する場合は
IOExceptionが発生します(上書き移動はできません)。 - ドライブ間移動: CドライブからDドライブへなど、異なるボリューム間での移動も可能です(内部的にコピー&削除が行われます)。
