在C#中创建文本文件

时间:2015-01-07 16:19:00

标签: c# file path streamwriter

我正在学习如何在C#中创建文本文件,但我遇到了问题。我用了这段代码:

private void btnCreate_Click(object sender, EventArgs e)        
{

    string path = @"C:\CSharpTestFolder\Test.txt";
    if (!File.Exists(path))
    {
        File.Create(path);
        using (StreamWriter sw = File.CreateText(path))
        {
            sw.WriteLine("The first line!");
        }

    }
    else if (File.Exists(path))
        MessageBox.Show("File with this path already exists.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

}

当我按下"创建"按钮,Visual Studio显示错误' System.IO.DirectoryNotFoundException',它指向" File.Create(path)"。

问题出在哪里?

4 个答案:

答案 0 :(得分:7)

该例外表明您的目录C:\CSharpTestFolder不存在。 File.Create将在现有文件夹/路径中创建一个文件,它也不会创建完整路径。

您的支票File.Exists(path)将返回false,因为该目录不存在,因此该文件也不存在。您需要先检查文件夹中的Directory.Exists,然后创建目录,然后再创建文件。

将您的文件操作包含在try/catch中。您不能100%确定File.ExistsDirectory.Exists,可能有其他流程创建/删除项目,如果您完全依赖这些检查,则可能会遇到问题。

您可以创建目录,如:

string directoryName = Path.GetDirectoryName(path);
Directory.CreateDirectory(directoryName);

(您可以在不调用Directory.CreateDirectory的情况下调用Directory.Exists,如果该文件夹已存在,则不会抛出异常)然后检查/创建您的文件

答案 1 :(得分:7)

假设您的目录存在(正如您所说)那么您还有另一个问题

File.Create会锁定它创建的文件,你不能以这种方式使用StreamWriter。

相反,你需要写

using(FileStream strm = File.Create(path))
using(StreamWriter sw = new StreamWriter(strm))
    sw.WriteLine("The first line!");

然而,除非您需要使用特定选项(see File.Create overload list)创建文件,否则所有这些都不是必需的,因为如果文件不存在,StreamWriter会自行创建文件。

// File.Create(path);
using(StreamWriter sw = new StreamWriter(path))
    sw.WriteLine("Text");

......或全部在一行

File.WriteAllText(path, "The first line");

答案 2 :(得分:5)

您必须先创建目录。

string directory = @"C:\CSharpTestFolder";

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

string path = Path.Combine(directory, "Test.txt");
if (!File.Exists(path))
{
    File.Create(path);
    using (StreamWriter sw = File.CreateText(path))
    {
        sw.WriteLine("The first line!");
    }

}
else if (File.Exists(path))
    MessageBox.Show("File with this path already exists.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);

答案 3 :(得分:1)

试试这个。

string path = @"C:\CSharpTestFolder";

if (Directory.Exists(path))
{
    File.AppendAllText(path + "\\Test.txt", "The first line");
}

else
{
    Directory.CreateDirectory(path);
    File.AppendAllText(path + "\\Test.txt", "The first line");
}

File.AppendAllText(path, text)方法将创建一个文本文件(如果它不存在);附加文本并关闭文件。 如果该文件已存在,它将打开该文件并将文本附加到该文件,然后关闭该文件。

该异常表明目录C:\CSharpTestFolder不存在。