将文本框中的数据写入文本文件

时间:2013-01-09 20:50:21

标签: c# streamreader streamwriter

以下是用于写入和读取文本文件的代码。

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'因为它正被另一个进程使用。“

任何人都可以告诉我为什么我有这个错误,也许可以帮我修复它

6 个答案:

答案 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.WriteAllTextFile.AppendAllTextFile.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)

之前我见过这种行为 - 通常会有另一个进程打开阻止文件访问。您的任务栏中是否打开了多个开发服务器? (奇怪,是的,但我看到它发生了)