以下是用于写入和读取文本文件的代码。
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'因为它正被另一个进程使用。“
任何人都可以告诉我为什么我有这个错误,也许可以帮我修复它
答案 0 :(得分:4)
尝试在您的信息流周围添加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);
}
答案 1 :(得分:3)
您在阅读文件后似乎没有关闭该文件。致电FileInfo.OpenText后,您将获得StreamReader
,必须通过Close方法关闭,或者更好,并使用using
声明。
但是已经有方法可以为你做所有这些,看看File.WriteAllText, File.AppendAllText和File.ReadAllLines方法。
答案 2 :(得分:1)
一旦您不再需要StreamReader对象,您需要Close。这应该解决这个问题。 即。
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();
}
答案 3 :(得分:1)
您已打开文件但尚未关闭。
StreamReader sr1 = file1.OpenText();
StreamReader sr2 = file2.OpenText();
答案 4 :(得分:1)
您的问题出现了,因为您没有关闭流阅读器。
使用外部资源(本例中的文件)的一种更安全的方法是将它们用于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"));
答案 5 :(得分:0)
之前我见过这种行为 - 通常会有另一个进程打开阻止文件访问。您的任务栏中是否打开了多个开发服务器? (奇怪,是的,但我看到它发生了)