c#从用户指定的文件中读取文本时出错



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

    }
}

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

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

处理文件有时是一件令人头痛的事情,但是变通方法或欺骗系统可以解决这个问题。

我建议从解析中分离出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()返回单个字符,否则您的内部循环将不得不彻底改变。

相关内容

  • 没有找到相关文章

最新更新