none
File.WriteAllTextについて RRS feed

  • 質問

  • File.WriteAllTextでファイルを作成する際、pathで指定したディレクトリが存在しない場合の動作がよく判りません。

    ソフトAではディレクイトリとファイルを作成します。

    ソフトBではSystem.IO.DirectoryNotFoundExceptionが発生します。(dir2が存在しない場合)

    string mypath= Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData),
    "dir1\\dir2\\MyList.asx");

    System.IO.File.WriteAllText(mypath, sw, Encoding.GetEncoding("Shift_JIS"));

    ディレクイトリは作成しなければ駄目なのでしょうか?

    2012年4月12日 3:26

回答

  • 村尾DOS さんこんにちは。

    > ディレクイトリは作成しなければ駄目なのでしょうか?

    はい、そのとおりです。例外のメッセージにもあるとおり「DirectoryNotFoundException」なのでディレクトリのない場所にファイルを作ろうとするとエラーになります。(System.IO 名前空間にあるクラスの各処理は大体事前にディレクトリ作っておく必要があるものが多いですね)

    ソフトAが何で作られているか、どのように作られているかはわかりませんが、事前にディレクトリを作成してからファイルを作成しているものを思われます。もちろん使用しているフレームワークによっては関数呼ぶだけで一括で作成するものもあります。ただ、Windows が行う内部処理としては「ディレクトリを階層ごとにひとつひとつ作成する」「ファイルを作成・オープンする」「書き込む」「閉じる~(略)」で共通だと思います。

    File.WriteAllText メソッド (String, String, Encoding)
    http://msdn.microsoft.com/ja-jp/library/ms143376.aspx


    おのでら (http://sorceryforce.com/)

    2012年4月12日 3:37

すべての返信

  • 村尾DOS さんこんにちは。

    > ディレクイトリは作成しなければ駄目なのでしょうか?

    はい、そのとおりです。例外のメッセージにもあるとおり「DirectoryNotFoundException」なのでディレクトリのない場所にファイルを作ろうとするとエラーになります。(System.IO 名前空間にあるクラスの各処理は大体事前にディレクトリ作っておく必要があるものが多いですね)

    ソフトAが何で作られているか、どのように作られているかはわかりませんが、事前にディレクトリを作成してからファイルを作成しているものを思われます。もちろん使用しているフレームワークによっては関数呼ぶだけで一括で作成するものもあります。ただ、Windows が行う内部処理としては「ディレクトリを階層ごとにひとつひとつ作成する」「ファイルを作成・オープンする」「書き込む」「閉じる~(略)」で共通だと思います。

    File.WriteAllText メソッド (String, String, Encoding)
    http://msdn.microsoft.com/ja-jp/library/ms143376.aspx


    おのでら (http://sorceryforce.com/)

    2012年4月12日 3:37
  • おのでらさんアドバイス有難うございます。

    やはりディレクイトリは自分で作らないと駄目なんですね。

    ソフトAはインストーラが作成していました。

    お騒がせしました。

    2012年4月12日 7:12