60

C# のファイル IO チュートリアルを読んでいて、いくつかのファイルを書き出すことができましたが、指定されたパスにディレクトリが含まれている場合はどうなるでしょうか?

たとえば、フォルダーが存在しないというファイルを作成したいとしdata/my_fileますdata

この線、

BinaryWriter outFile = new BinaryWriter(File.OpenWrite(path));

wherepathは上記の文字列で、パスの一部が存在しないというメッセージが表示されてクラッシュします。これは、C# が必要に応じてパスを作成していないことを意味します。

パスを解析して必要なすべてのディレクトリを作成するのではなく、面倒なディレクトリの作成とチェックをすべて C# に処理してもらいたいと考えています。これは可能ですか?それ以外の場合は、見落としている可能性のあるものをすべて処理するプロジェクトにコピーできるコードのスニペットがありますか (ファイル管理についてあまり知らないため)。

4

5 に答える 5

135

System.IO.Directory.CreateDirectory()は、指定されたパスにすべてのディレクトリとサブディレクトリを作成します (まだ存在しない場合)。

パスを渡して呼び出して、ファイルを書き込む前にフォルダー構造が作成されるようにすることができます。

于 2012-06-08T00:25:51.903 に答える
9

確かに再帰的にディレクトリをSystem.IO.Directory.CreateDirectory()作成しますが、独自の方法を考え出さなければならない状況に遭遇しました。基本的に、System.IO260 文字を超えるパスをサポートしていないためDelimon.Win32.IO、長いパスで動作するライブラリを使用する必要がありましたが、ディレクトリを再帰的に作成しません。

ディレクトリを再帰的に作成するために使用したコードは次のとおりです。

void CreateDirectoryRecursively(string path)
{
    string[] pathParts = path.Split('\\');

    for (int i = 0; i < pathParts.Length; i++)
    {
        if (i > 0)
            pathParts[i] = Path.Combine(pathParts[i - 1], pathParts[i]);

        if (!Directory.Exists(pathParts[i]))
            Directory.CreateDirectory(pathParts[i]);
    }
}
于 2014-05-08T14:16:57.443 に答える