StreamReader在读取文本文件时会锁定文件。
我能否强制StreamReader以“只读”或“非锁定”模式工作?
我的解决方法是将文件复制到临时位置,然后从那里读取,但如果可能的话,我更愿意直接使用StreamReader。 有其他替代建议吗?
背景:
我编写了一个小应用程序,以从日志文件中获取一些统计信息。这个文件正在被外部程序 AAXXYY 不断更新(每秒几次)。
查看输出表明,我的应用程序可能正在锁定该文件并阻止 AAXXYY 的写入。
以下就是我的做法
private void btnGetStats_Click(object sender, EventArgs e)
{
int countStarts = 0;
int countEnds = 0;
IList<string> sessions = new List<string>();
using(StreamReader stRead = new StreamReader(openFileDialog1.FileName,Encoding.Unicode))
{
while(!stRead.EndOfStream)
{
string line = stRead.ReadLine();
if(line.Contains("Session start"))
{
countStarts++;
sessions.Add(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
}
if (line.Contains("Session end"))
{
countEnds++;
sessions.Remove(line.Substring(line.IndexOf("["), line.LastIndexOf("]") - line.IndexOf("[")));
}
}
}
txtStarts.Text = countStarts.ToString();
txtEnds.Text = countEnds.ToString();
txtDifference.Text = (countStarts - countEnds).ToString();
listBox1.DataSource = sessions;
}
using
语句在完成时会自动调用dispose。 - Rufus L