正在使用的文件错误C#从用户指定的文件中读取文本

时间:2013-03-12 18:57:07

标签: c# stream runtime-error

我的代码正在发出文件正在使用的运行时错误。我不确定我是如何解决这个问题的。我需要文件对话框与用户进行交互,但我想逐行阅读。该文件以分号分隔,我手动解析它并将其提供给系统。如何从opendialog中释放文件,以便我可以使用它。任何帮助非常感谢提前感谢。

List<string> datalinestream = new List<string>();
FileDialog FD = new System.Windows.Forms.OpenFileDialog();

if (FD.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{


    TextReader reader = new StreamReader(FD.FileName);
    using (reader)
    {
        string line = "";
        while ((line = reader.ReadLine()) != null)
        {

            while (!string.Equals(reader.Read(),"/r"))
            {
                datalinestream.Add(GetWord(reader));
            }
            LuceneDB.AddUpdateLuceneIndex(new MATS_Doc( datalinestream));
            datalinestream.Clear();
        }


    }
}

2 个答案:

答案 0 :(得分:1)

我要做的是创建一个包含原始文本文件相同信息的临时文件。我将确保使用类似GUID的格式化文件名,这样就不会再出现任何问题。然后我的代码将完成临时文件的所有工作。

之后,(如果需要)使用您在临时文件上所做的更改来更新原始文件。

处理文件有时会令人头疼,但是解决方法或欺骗系统可以完成工作。

答案 1 :(得分:1)

我建议从解析中分离出FileOpenDialog互动。

这样的事情:

List<string> datalinestream = new List<string>();
string fileName;

using(FileDialog FD = new System.Windows.Forms.OpenFileDialog())
{
    if(FD.ShowDialog() == DialogResult.OK)
        fileName = FD.FileName;
    else
        return;
}

TextReader reader = new StreamReader(fileName);
using (reader)
{
    string line = "";
    while ((line = reader.ReadLine()) != null)
    {

        while (reader.Read() != '\r')
        {
            datalinestream.Add(GetWord(reader));
        }
        LuceneDB.AddUpdateLuceneIndex(new MATS_Doc( datalinestream));
        datalinestream.Clear();
    }
}

我还假设您要检查\r字符,而不是包含两个字符/r的字符串,因为StreamReader.Read()返回单个字符,否则你的内部循环必须非常彻底地改变。