如何使用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();
}
}
}
}
}
}
文件。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.
}
}
}
}