相关疑难解决方法(0)

我可以阻止StreamReader在使用时锁定文本文件吗?

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;
    }
Run Code Online (Sandbox Code Playgroud)

.net c# concurrency logging filelock

20
推荐指数
2
解决办法
2万
查看次数

File.ReadLines没有锁定它?

我可以打开一个FileStream

new FileStream(logfileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
Run Code Online (Sandbox Code Playgroud)

没有锁定文件.

我可以这样做File.ReadLines(string path)吗?

c# io file stream filestream

14
推荐指数
1
解决办法
1万
查看次数

标签 统计

c# ×2

.net ×1

concurrency ×1

file ×1

filelock ×1

filestream ×1

io ×1

logging ×1

stream ×1