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