【发布时间】:2018-06-30 19:24:53
【问题描述】:
StreamReader sr = new StreamReader("C:/CR EZ Test/Log.txt"); //use with IF
private void timer2_Tick(object sender, EventArgs e)
{
if ((line = sr.ReadLine()) != null)
{
//FileStream fs = File.Open("C:/CR EZ Test/Log.txt", FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
//StreamReader sr = new StreamReader(fs); //use with While can't use with }else{
//while ((line = sr.ReadLine()) != null)
//{
string[] dataLog = line.Split(new[] { ',' }, StringSplitOptions.None);
mpa = (dataLog[1]);
ml = (dataLog[2]);
lph = (dataLog[3]);
elapsedTime = float.Parse(dataLog[4]) / 1000;
if (testStatus > 0) time = elapsedTime.ToString("0.0");
tb2.Value = int.Parse(dataLog[6]);
if (chart1.Series[0].Points.Count > tb1.Value && tb1.Value > 0)
{
chart1.Series[0].Points.RemoveAt(0);
chart1.Series[1].Points.RemoveAt(0);
}
chart1.Series[0].Points.AddXY(dataLog[5], int.Parse(dataLog[1]));
chart1.Series[1].Points.AddXY(dataLog[5], int.Parse(dataLog[6]));
//}
}
else
{
sr.DiscardBufferedData();
sr.BaseStream.Seek(0, SeekOrigin.Begin);
sr.BaseStream.Position = 0;
//sr.Close();
//alertTB.Text = "";
timer2.Enabled = false;
}
alertTB.ForeColor = Color.Red;
alertTB.Text = "Data Log Viewing In Progress";
}
问题是我正在通过 GUI 读取一个充满变量的文本文件,例如重播视频。如代码所示,它可以工作,我可以控制计时器滴答声来改变重播速度。问题是文件正在使用中,因此我无法在文件使用时写入或删除文本,而无需先关闭它。我希望能够找到 Streamreader 的解决方法,或者使用 Filestream 到 Streamreader 代码,这将允许我在使用文件时对其进行编辑。存在的问题是,我不知道如何使它与计时器一起工作,它只是非常快速地读取整个文件。非常感谢任何帮助或想法。
这里的问题是如何让注释掉的代码:
- 读取文本文件的一行,
- 让计时器计时
- 然后读取文本文件的下一行,以此类推。显然是在数据到达时对其进行处理。
【问题讨论】:
-
是否可以一次读取整个文件,然后使用计时器从内存中读取数据?然后,您只需要确定何时再次读取文件
-
你知道这样做的例子吗?
-
尽量减少阅读时间。给
System.IO.File.ReadAllLines一个机会 -
打开文件,一次将其所有内容读入
List<string> 或其他东西,关闭它,然后处理(“回放”)列表的内容。当您到达列表末尾时,重新打开文件,阅读,重复。
标签: c# streamreader datalog