2

私は小さなアドレス帳アプリに取り組んでいます。フォルダーを作成し、そのフォルダー内に .xml ファイルを作成する必要があります。問題は、アプリがフォルダーを作成するが、ファイルを作成できないことです!

コードは次のとおりです。

private void Form1_Load(object sender, EventArgs e)
{
    string path = 
        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    if(!Directory.Exists(path + "\\Address Book - Neca"))
        Directory.CreateDirectory(path + "\\ Address Book - Neca");
    if (!File.Exists(path + "\\Address Book - Neca//settings.xml"))
        File.Create(path + "\\Address Book - Neca//settings.xml");
}
4

5 に答える 5

4

File.Createファイル ストリームを作成して返します。データを含むファイルは、そのファイル ストリームを閉じたときにのみ書き込まれます。

これを行う便利な方法は、usingブロックを使用することです。

using (FileStream fs = File.Create(...)) {
    // write to file here
}

また、最初にファイルの存在を確認してからファイルを作成することはお勧めできません。への呼び出し中にファイルが存在しなかった可能性がFile.Existsあり、同じ名前のファイルが他のプロセスによって作成された可能性があり、その後、への呼び出しFile.Createが実行されて失敗します。ファイルを作成しようとするときは、試してみて、例外をキャッチして、それが不可能であることを確認してください。

于 2013-07-25T17:20:02.590 に答える
4

createdirectory メソッド パラメータの Address の前にスペースが含まれています

于 2013-07-25T17:20:55.907 に答える
2

コードを改善しましたので、ご覧ください。フォルダ パスには . の間にスペースがあります\

含む:

using System.IO;

以降:

private void Form1_Load(object sender, EventArgs e)
{
        // prepare the path
    string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
        // prepare the folder path
    string folderPath = Path.Combine(path, "Address Book - Neca");
        // prepare the file path
    string settingFilePath = Path.Combine(folderPath, "settings.xml");

    if(!Directory.Exists(folderPath))
        Directory.CreateDirectory(folderPath);

    if (!File.Exists(settingFilePath))
        File.Create(settingFilePath);

}
于 2013-07-25T17:20:53.970 に答える
1

バックスラッシュを使用してみてください:

private void Form1_Load(object sender, EventArgs e)
{
    string path = 
        Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
    if(!Directory.Exists(path + "\\Address Book - Neca"))
        Directory.CreateDirectory(path + "\\Address Book - Neca");
    if (!File.Exists(path + "\\Address Book - Neca\\settings.xml"))
        File.Create(path + "\\Address Book - Neca\\settings.xml");
}
于 2013-07-25T17:20:11.877 に答える