Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
Directory.Exists() / Directory.CreateDirectory()
ディレクトリの存在確認・作成・削除・ファイル一覧取得など、ディレクトリを操作する『Directory』クラスのメソッドの使い方です。
構文
using System.IO; // ディレクトリが存在するか確認します。 bool 存在 = Directory.Exists(string path); // ディレクトリを作成します(途中のディレクトリも再帰的に作成します)。 Directory.CreateDirectory(string path); // ディレクトリを削除します。 Directory.Delete(string path); // ディレクトリを再帰的に削除します(中身ごと削除)。 Directory.Delete(string path, bool recursive); // ディレクトリ内のファイルパス一覧を取得します。 string[] ファイル一覧 = Directory.GetFiles(string path); string[] ファイル一覧 = Directory.GetFiles(string path, string searchPattern); // サブディレクトリのパス一覧を取得します。 string[] ディレクトリ一覧 = Directory.GetDirectories(string path); // ディレクトリを移動(リネーム)します。 Directory.Move(string sourceDirName, string destDirName);
メソッド一覧
| メソッド | 概要 |
|---|---|
| Directory.Exists(path) | 指定したパスのディレクトリが存在すれば true を返します。 |
| Directory.CreateDirectory(path) | ディレクトリを作成します。途中のパスが存在しない場合も含めて再帰的に作成します。既存の場合は何もしません。 |
| Directory.Delete(path) | 空のディレクトリを削除します。中身がある場合は IOException をスローします。 |
| Directory.Delete(path, true) | ディレクトリを中身ごと再帰的に削除します。 |
| Directory.GetFiles(path) | ディレクトリ内のファイルのフルパス一覧を string 配列で返します。 |
| Directory.GetFiles(path, pattern) | "*.txt" などのパターンで絞り込んでファイル一覧を返します。 |
| Directory.GetDirectories(path) | ディレクトリ内のサブディレクトリのフルパス一覧を返します。 |
| Directory.Move(src, dest) | ディレクトリを別の場所へ移動します。リネームにも使用できます。 |
サンプルコード
using System;
using System.IO;
string ベースパス = "work";
string サブパス = Path.Combine(ベースパス, "logs", "2024");
// Directory.Exists() でディレクトリの存在を確認します。
Console.WriteLine(Directory.Exists(ベースパス)); // False
// Directory.CreateDirectory() でディレクトリを作成します。
// 中間のパス(logs/2024)も含めて一度に作成できます。
Directory.CreateDirectory(サブパス);
Console.WriteLine(Directory.Exists(サブパス)); // True
// テスト用ファイルを作成します。
File.WriteAllText(Path.Combine(サブパス, "app.log"), "アプリログ");
File.WriteAllText(Path.Combine(サブパス, "error.log"), "エラーログ");
File.WriteAllText(Path.Combine(サブパス, "data.txt"), "データファイル");
// Directory.GetFiles() でファイル一覧を取得します。
Console.WriteLine("--- すべてのファイル ---");
foreach (string ファイル in Directory.GetFiles(サブパス))
{
Console.WriteLine(Path.GetFileName(ファイル));
}
// パターンで絞り込みます(*.log のみ)。
Console.WriteLine("--- .log ファイルのみ ---");
foreach (string ファイル in Directory.GetFiles(サブパス, "*.log"))
{
Console.WriteLine(Path.GetFileName(ファイル));
}
// Directory.GetDirectories() でサブディレクトリ一覧を取得します。
Console.WriteLine("--- サブディレクトリ ---");
foreach (string dir in Directory.GetDirectories(ベースパス))
{
Console.WriteLine(Path.GetFileName(dir));
}
// Directory.Delete() で中身ごと再帰削除します。
Directory.Delete(ベースパス, recursive: true);
Console.WriteLine($"削除後: {Directory.Exists(ベースパス)}"); // False
概要
『Directory.CreateDirectory()』はディレクトリが既に存在していても例外をスローしないため、Exists() で事前確認しなくても安全に使用できます。『Directory.Delete(path, true)』で再帰削除を行うと元に戻せないため、パスを十分確認してから実行してください。
パス文字列の組み立てには OS ごとの区切り文字の差異を吸収するPath.Combine() / Path.GetFileName()の使用を推奨します。ファイルの読み書きについてはFile.ReadAllText() / WriteAllText()をご確認ください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。