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 回答
0
string path = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
string fileName = path + "\\Address Book - Neca")) 
                if (!File.Exists(fileName))
                {
                    using (FileStream fs = File.Create(fileName, 1024))
                    {
                        Byte[] info = new UTF8Encoding(true).GetBytes(e.Message);
                        fs.Write(info, 0, info.Length);
                    }
                }
于 2013-07-25T17:25:45.983 回答