自動的にフォルダを含めたファイルを保存する方法

ツールを作成していると、色々な場所にファイルを置きたくなるものです。

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 が再帰的にディレクトリの有無を確認し、存在しない場所から自動的にディレクトリを作成していきます。

再帰は完結に書けるけど、ぱっと見理解しづらいのが難点

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA