Azo*_*l54 1 c# file visual-studio
我的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);
}
}
Run Code Online (Sandbox Code Playgroud)
组合框效果很好并显示内容,但是当我尝试使用文本框添加新条目时,结果如下.
system.io.ioexception进程无法访问该文件,因为它正被另一个进程使用
我知道该文件被组合框的进程锁定,但我该怎么办才能解决这种情况?
StreamReader在表单加载期间,您不会丢弃它.
using(StreamReader sr = new StreamReader(PathFile))
{
string line = sr.ReadLine();
while (line != null)
{
comboBox1.Items.Add(line);
line = sr.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
此外,当您使用将StreamWriter数据写入文件时,还需要处理流:
using(StreamWriter sw = new StreamWriter(PathFile))
{
sw.WriteLine(textBox1.Text);
}
Run Code Online (Sandbox Code Playgroud)
那怎么using办?这是一个非常简洁的结构.IDisposable无论代码是否到达using块的末尾,或者抛出异常,它都需要并确保对象处置.我们需要处理像stream这样的东西,因为它们拥有非托管资源(例如文件句柄),我们不想等待垃圾收集器启动并实际释放句柄.
using 在语义上等同于:
IDisposable someObjectThatIsDispoable; // e.g. StreamWriter/StreamReader, et al
try
{
// your code here
}
finally
{
if(someObjectThatIsDisposable != null)
someObjectThatIsDisposable.Dispose();
}
Run Code Online (Sandbox Code Playgroud)
另外,dispose负责关闭文件,因此调用Close是不必要的(因此它们已从此答案中删除).
| 归档时间: |
|
| 查看次数: |
3641 次 |
| 最近记录: |