gpt4 book ai didi

c# - 我可以防止 StreamReader 在使用时锁定文本文件吗?

转载 作者:IT王子 更新时间:2023-10-29 04:41:06 24 4
gpt4 key购买 nike

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;
}

最佳答案

您可以将 FileStream 传递给 StreamReader,并使用适当的 FileShare 值创建 FileStream。例如:

using (var file = new FileStream (openFileDialog1.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var reader = new StreamReader (file, Encoding.Unicode)) {
}

关于c# - 我可以防止 StreamReader 在使用时锁定文本文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1606349/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com