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
来最小化阅读时间。 - CleptusList<string>
或其他数据结构中,然后关闭文件,接着处理(“播放”)列表中的内容。当你到达列表末尾时,重新打开文件,读取它,重复上述过程。 - 3Dave