ツールを作成していると、色々な場所にファイルを置きたくなるものです。
string contents = "ABCDE";
File.WriteAllText("test.txt", contents, Encoding.UTF8);
これなら(test.txt を排他的にブロックしていない限り)、問題なくファイルが作成されます。
では、これは?
string contents = "ABCDE";
File.WriteAllText("group00/original/test.txt", contents, Encoding.UTF8);
おそらくこんなエラーになるはずです。
DirectoryNotFoundException: Could not find a part of the path "C:\[Application's path]\group00\original\test.txt".
個別にディレクトリも作成すればエラーはなくなりますが、毎回書くのも面倒…。
なので自動的に作成してもらいましょう。
public static class FileEx
{
public static void WriteAllText(string path, string contents, System.Text.Encoding encoding)
{
completeDirectory(Path.GetDirectoryName(path));
File.WriteAllText(path, contents, encoding);
}
static void completeDirectory(string dir)
{
if (string.IsNullOrEmpty(dir) == true)
{
return;
}
if (Directory.Exists(dir) == false)
{
completeDirectory(Path.GetDirectoryName(dir));
Directory.CreateDirectory(dir);
}
}
}
FileEx.WriteAllText("group00/original/test.txt", contents, Encoding.UTF8);
completeDirectory が再帰的にディレクトリの有無を確認し、存在しない場所から自動的にディレクトリを作成していきます。
再帰は完結に書けるけど、ぱっと見理解しづらいのが難点