gpt4 book ai didi

c# - 错误消息 'Can' t 写入文本文件 : File is being used by another process'

转载 作者:太空宇宙 更新时间:2023-11-03 17:11:03 25 4
gpt4 key购买 nike

我的 C# 表单有一个问题。我有一个文本框,用于在单击按钮时将内容添加到外部 txt 文件和一个显示 txt 文件内容的组合框。

我的代码:

String PathFile = @"Mypath";

private void button1_Click(object sender, EventArgs e)
{
StreamWriter sw = new StreamWriter(PathFile);
sw.WriteLine(textBox1.Text);
sw.Close();
}

private void Form1_Load(object sender, EventArgs e)
{
try
{

StreamReader sr = new StreamReader(PathFile);
string line = sr.ReadLine();
while (line != null)
{
comboBox1.Items.Add(line);
line = sr.ReadLine();
}
}
catch (Exception ex)
{
MessageBox.Show("Error : " + ex.Message);
}
}

组合框可以很好地显示内容,但是当我尝试使用文本框添加新条目时,结果如下。

system.io.ioexception the process cannot access the file because it is being used by another process

我知道文件已被组合框的进程锁定,但我该怎么做才能解决这种情况?

最佳答案

您没有在表单加载期间处理 StreamReader

using(StreamReader sr = new StreamReader(PathFile))
{
string line = sr.ReadLine();
while (line != null)
{
comboBox1.Items.Add(line);
line = sr.ReadLine();
}
}

此外,当您使用StreamWriter 将数据写入文件时,您还需要处理流:

using(StreamWriter sw = new StreamWriter(PathFile))
{
sw.WriteLine(textBox1.Text);
}

那么 using 有什么作用呢?这是一个非常简洁的结构。它采用一个 IDisposable 并确保无论代码到达 using block 的末尾还是抛出异常,都会释放该对象。我们需要处理流之类的东西,因为它们持有非托管资源(例如文件句柄),我们不想等待垃圾收集器启动并实际释放句柄。

using 在语义上等同于:

IDisposable someObjectThatIsDispoable; // e.g. StreamWriter/StreamReader, et al
try
{
// your code here
}
finally
{
if(someObjectThatIsDisposable != null)
someObjectThatIsDisposable.Dispose();
}

此外,dispose 负责关闭文件,因此不需要调用 Close(因此已从此答案中删除它们)。

关于c# - 错误消息 'Can' t 写入文本文件 : File is being used by another process',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17885134/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com