StreamReader在读取文本文件时锁定文本文件。
我可以强制StreamReader以“只读”或“非锁定”模式工作吗?我可以防止StreamReader在使用时锁定文本文件吗?
我的解决方法是将文件复制到临时位置并从那里读取,但如果可能,我宁愿直接使用StreamReader。 任何替代suggetions?
背景:
我写了一个小应用程序来获取日志文件的一些统计数据。该文件不断更新(每秒几次)由外部程序调用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;
}
+1这很好。谢谢。尽管我必须用FileStream和StreamReader替换“var”。什么是var suppossed做?那是VB吗? 我认为应该编辑这个答案来改变那些,但我没有代表自己做 – 2009-10-22 11:18:30
关于'var'关键字,请参阅此链接:http://msdn.microsoft.com/en-us/library/bb383973的.aspx。该关键字在C#3.0+中是新的。 – pyrocumulus 2009-10-22 11:19:50
啊哈。谢谢云。为我在黑暗时代工作适合我。耻辱我不能+1评论:-) – 2009-10-22 11:28:34