0

我的代码给出了文件已在使用中的运行时错误。我不确定我如何解决这个问题。我需要文件对话框与用户交互,但我想逐行阅读它。该文件以分号分隔,我手动解析它并将其输入系统。如何从 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();
        }


    }
}
4

2 回答 2

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字符,而不是带有两个字符的字符串,并且/返回单个字符,否则您的内部循环将不得不发生相当大的变化。rStreamReader.Read()

于 2013-03-12T19:04:33.253 回答
1

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

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

处理文件有时令人头疼,但变通办法或欺骗系统可以完成这项工作。

于 2013-03-12T19:02:50.973 回答