我的代码正在发出文件正在使用的运行时错误。我不确定我是如何解决这个问题的。我需要文件对话框与用户进行交互,但我想逐行阅读。该文件以分号分隔,我手动解析它并将其提供给系统。如何从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();
}
}
}
答案 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()
返回单个字符,否则你的内部循环必须非常彻底地改变。