创建一个文本文件并向其中写入内容。

8
我希望创建一个文本文件,然后将 TextBox 中的文本添加到其中。使用以下代码可以轻松创建文本文件:
InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    File.Create(path);
}

当我试图把文本添加到文本文件中时,会出现文件正在使用的错误。如果在运行代码之前该文件已经存在,则不会出现此错误,并且 TextBox.Text 会被添加到文件中。我使用以下代码将文本添加到文本文件中:

public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    if (File.Exists(path))
    {
        using (var tw = new StreamWriter(path, true))
        {
            tw.WriteLine(TextBox1.Text);
            tw.Close();
        }
    }
}

当然,我很乐意帮助你。

尝试将 File.Create(path); 更改为 using (File.Create(path)); - mrogal.ski
谢谢,现在它完美地工作了;) 我没有看到其他问题,很抱歉问了一个类似的问题。 - Morris
6个回答

18

实际上,您不必检查文件是否存在,因为StreamWriter将为您执行此操作。

using (var tw = new StreamWriter(path, true))
{
    tw.WriteLine(TextBox1.Text);
}

public StreamWriter( string path, bool append )

决定是否将数据附加到文件。如果文件已存在且append为false,则覆盖该文件。如果文件已存在且append为true,则将数据附加到文件中。否则,创建一个新文件。


好的,谢谢你。我正在从头开始修改我的代码,所以还有很多无关的代码需要删除。但是我不知道StreamWriter会为我检查它。 - Morris
1
是的,否则会创建一个新文件。 - Hadi Farhadi
太好了,我已经准备好了StramWritter,但我不确定它是否会在已经存在的情况下创建或写入,看来我不需要控制它!非常感谢! - Juano

2

当你创建文件时,应该使用带有using语句的File.Create,因为它会锁定文件。所以只需要更改这一行:

File.Create(path);

变成这样:

using (File.Create(path));

0

如果文件存在,它可以被覆盖或附加到。如果文件不存在,此构造函数将创建一个新文件。因此,您不需要检查文件是否存在。

在您想修改文件之前,您需要确保文件已关闭。


0

正如您所看到的这里,StreamWriter,当指定路径上不存在文件时,它实际上会创建一个文件,因此检查它是无用的。

我建议删除创建文件的部分,只需开始写入:

public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    using (var tw = new StreamWriter(path, true))
    {
        tw.WriteLine(TextBox1.Text);
        tw.Close();
    }
}

但是如果你真的想要事先创建文件,请记得DisposeFile.Create调用创建的FileStream对象。Dispose调用将自动为您调用FlushClose,因此非常安全,您可以以多种方式执行此操作:

InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    using ( File.Create(path) ) ; // This will generate warnings that you're not using the object and so on, but that's okay,
}

或者像这样:

InitializeComponent();
string path = @"C:\Users\Morris\Desktop\test.txt";
if (!File.Exists(path))
{
    FileStream fs = File.Create(path);
    fs.Dispose();
}

-1

你需要移动你的

tw.Close();

在你的"using"之外。就像这样:

public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    if (File.Exists(path))
    {
        using (var tw = new StreamWriter(path, true))
        {
            tw.WriteLine(TextBox1.Text);
        }
        tw.Close();
    }
}

编辑:正如指出的那样,当使用结束时,编写器将被处理,因此不需要手动关闭。

public void writeTxt()
{
    string path = @"C:\Users\Morris\Desktop\test.txt";
    if (File.Exists(path))
    {
        using (var tw = new StreamWriter(path, true))
        {
            tw.WriteLine(TextBox1.Text);
        }
    }
}

1
tw 到达 Close 时已被处理。 - mrogal.ski
2
using退出作用域时,它会关闭tw - Markiian Benovskyi
当然!谢谢你指出来。在这种情况下根本不需要执行.close。 - Tommy

-2

这就是为什么你应该将问题标记为重复的原因。 - Itban Saeed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接