如何使用c# windows应用程序在创建文本文件时添加文本

本文关键字:文本 文件 添加 创建 何使用 windows 应用程序 | 更新日期: 2023-09-27 18:03:57

我创建了一个c# windows应用程序项目。这里我需要在一个新的文本文件中添加一些文本,我应该在按钮上点击创建该文件。所以当我点击按钮时,我应该创建一个文本文件,应该有我使用控件给出的文本。但我的问题是,当我点击按钮时,它创建新文件,在文件中写入文本时,它面临一些问题,"进程无法访问文件'D:'MyWork'DemoEpub'98989.txt',因为它正在被另一个进程使用。"我已经给出了下面的代码。请帮我解决这个错误

        private void Create_Click(object sender, EventArgs e)
        {
            FileStream fs = null;
            string fileLoc = @"D:'MyWork'DemoEpub'" + textBox1.Text + ".txt";
            if (!File.Exists(fileLoc))
            {
                using (fs = File.Create(fileLoc))
                {
                    if (File.Exists(fileLoc))
                    {
                        using (StreamWriter sw = new StreamWriter(fileLoc))
                        {
                            try
                            {
                                sw.Write("<START>'n<TITLE>" + textBox1.Text + "</TITLE>'n<BODY>'n<P>PAGE " + textBox2.Text + "</P>'n<P>'n" + richTextBox1.Text + "</P>'n</BODY>'n<END>");
                            }
                            catch(System.IO.IOException exp)
                            {
                                sw.Close();
                            }
                        }
                    }
                }
            }
        }

如何使用c# windows应用程序在创建文本文件时添加文本

文件。Create创建并打开该文件。它返回一个流对象,该对象保持文件打开并锁定,直到该流对象被关闭/处置。

使用带有字符串路径的StreamReader构造函数将使StreamReader再次尝试打开文件,由于上述原因将失败。

要利用已经存在的流对象fs(它已经打开并锁定了文件),只需将其传递给StreamReader的构造函数:

    string fileLoc = @"D:'MyWork'DemoEpub'" + textBox1.Text + ".txt";
    if (!File.Exists(fileLoc))
    {
        using (Stream fs = File.Create(fileLoc))
        using (StreamWriter sw = new StreamWriter(fs))
        {
           ...
        }
    }

还需要注意的是,在获得fs之后,不需要再执行第二次File.Exists()检查。从 file . create ()获得一个有效的流对象意味着文件已经成功创建。如果不能创建文件, file . create ()会抛出异常。

另一种方法是直接对给定的字符串路径使用StreamWriter(不单独创建Stream对象):
    string fileLoc = @"D:'MyWork'DemoEpub'" + textBox1.Text + ".txt";
    if (!File.Exists(fileLoc))
    {
        using (StreamWriter sw = new StreamWriter(fileLoc))
        {
           ...
        }
    }


最后,作为旁注,我想指出,如果您使用using语句,则不需要在异常处理程序中显式关闭StreamReader或Stream对象。当程序离开using语句的作用域时,using将处理(包括关闭)作为其参数提供的StreamReader或Stream对象。关于使用的更多细节可以在MSDN文档中找到。

示例中的using语句打开并准备文件。在语句结束时,它们关闭并处置资源。如果你的程序有很多写操作,如果你使用using.

,它会正确地管理系统资源。

在本例中,StreamWriter为您创建文件并关闭文件,因此您不需要编写close函数。Catch是记录你的错误。

    private void Create_Click(object sender, EventArgs e)
    {
       string fileLoc = @"D:'MyWork'DemoEpub'" + textBox1.Text + ".txt";
       if (!File.Exists(fileLoc))
       {
          using (StreamWriter sw = new StreamWriter(fileLoc))
          {
                    try
                    {
                        sw.Write("<START>'n<TITLE>" + textBox1.Text + "</TITLE>'n<BODY>'n<P>PAGE " + textBox2.Text + "</P>'n<P>'n" + richTextBox1.Text + "</P>'n</BODY>'n<END>");
                    }
                    catch(System.IO.IOException exp)
                    {
                        //Catch your error here.
                    }
           }
    }
}