在 C# 中创建文本文件

Creating text file in C#

我正在学习如何在 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);

}

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

问题出在哪里?

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

您的检查 File.Exists(path) 将 return 错误,因为目录不存在,文件也不存在。您需要先在文件夹上检查 Directory.Exists,然后创建您的目录,然后创建文件。

将您的文件操作附在try/catch中。您不能 100% 确定 File.ExistsDirectory.Exists,可能还有其他过程 creating/removing 这些项目,如果您仅依靠这些检查,您可能 运行 会遇到问题.

您可以像这样创建目录:

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

(你可以调用Directory.CreateDirectory而不调用Directory.Exists,如果文件夹已经存在它不会抛出异常)然后check/create 你的文件

您必须先创建目录。

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);

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

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");

试试这个。

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目录不存在