[英]Writing data from textbox into text file
这是代码im用于读写文本文件。
StreamWriter sw1 = new StreamWriter("DataNames.txt");
sw1.WriteLine(textBox1.Text);
sw1.Close();
StreamWriter sw2 = new StreamWriter("DataNumbers.txt");
sw2.WriteLine(textBox2.Text);
sw2.Close();
FileInfo file1 = new FileInfo("DataNames.txt");
StreamReader sr1 = file1.OpenText();
while (!sr1.EndOfStream)
{
listBox1.Items.Add(sr1.ReadLine());
}
FileInfo file2 = new FileInfo("DataNumbers.txt");
StreamReader sr2 = file2.OpenText();
while (!sr2.EndOfStream)
{
listBox2.Items.Add(sr2.ReadLine());
}
问题是,当我单击按钮以将文本框中的数据保存到文本文件时,出现错误,提示“该进程无法访问文件'C:\\ xxxx \\ xxxxxx \\ xxxxx \\ xxxx \\ xxxxx \\ xxxxx.txt”,因为它正在被另一个进程使用。”
谁能告诉我为什么我有这个错误,也许可以帮助我解决它
尝试在流周围添加一个using
语句,以确保已将它们Disposed
否则文件仍被锁定到流
例:
//Write
using (StreamWriter sw1 = new StreamWriter("DataNames.txt"))
{
sw1.WriteLine(textBox1.Text);
}
using (StreamWriter sw2 = new StreamWriter("DataNumbers.txt"))
{
sw2.WriteLine(textBox2.Text);
}
// Read
foreach (var line in File.ReadAllLines("DataNames.txt"))
{
listBox1.Items.Add(line);
}
foreach (var line in File.ReadAllLines("DataNumbers.txt"))
{
listBox2.Items.Add(line);
}
似乎您在读取文件后没有关闭文件。 调用FileInfo.OpenText之后,您将获得一个StreamReader
,必须通过Close方法关闭 ,甚至更好的是,使用using
语句将其关闭。
但是已经有可以为您完成所有操作的方法,请看看File.WriteAllText , File.AppendAllText和File.ReadAllLines方法。
一旦不再需要,就需要关闭 StreamReader对象。 这应该可以解决此问题。 即
StreamReader sr1 = file1.OpenText();
try {
while (!sr1.EndOfStream)
{
listBox1.Items.Add(sr1.ReadLine());
}
}
finally {
sr1.Close();
}
FileInfo file2 = new FileInfo("DataNumbers.txt");
StreamReader sr2 = file2.OpenText();
try {
while (!sr2.EndOfStream)
{
listBox2.Items.Add(sr2.ReadLine());
}
}
finally {
sr2.Close();
}
您已打开文件但尚未关闭。
StreamReader sr1 = file1.OpenText();
StreamReader sr2 = file2.OpenText();
发生您的问题,因为您没有关闭流阅读器。
使用外部资源(在这种情况下为文件)的一种更安全的方法是将其使用嵌入using
语句中。 using
语句在语句块的末尾或如果语句块以其他方式离开时自动关闭资源。 例如,这可能是return
语句或异常。 即使发生异常,也可以保证关闭资源。
您可以将using
语句应用于实现IDisposable
接口的任何对象。
// Writing to the files
using (var sw1 = new StreamWriter("DataNames.txt")) {
sw1.WriteLine(textBox1.Text);
}
using(var sw2 = new StreamWriter("DataNumbers.txt")) {
sw2.WriteLine(textBox2.Text);
}
// Reading from the files
FileInfo file1 = new FileInfo("DataNames.txt");
using (StreamReader sr1 = file1.OpenText()) {
while (!sr1.EndOfStream) {
listBox1.Items.Add(sr1.ReadLine());
}
}
FileInfo file2 = new FileInfo("DataNumbers.txt");
using (StreamReader sr2 = file2.OpenText()) {
while (!sr2.EndOfStream)
{
listBox2.Items.Add(sr2.ReadLine());
}
}
但是,您可以像这样简化阅读部分
// Reading from the files
listBox1.Items.AddRange(File.ReadAllLines("DataNames.txt"));
listBox2.Items.AddRange(File.ReadAllLines("DataNumbers.txt"));
我以前已经看到过这种行为-通常有另一个打开的进程正在阻止文件访问。 您是否在任务栏中打开了多个开发服务器? (很奇怪,是的,但是我已经看到了这种情况)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.