ツールを作成していると、色々な場所にファイルを置きたくなるものです。
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 が再帰的にディレクトリの有無を確認し、存在しない場所から自動的にディレクトリを作成していきます。
再帰は完結に書けるけど、ぱっと見理解しづらいのが難点