繁体   English   中英

C# 使用 FileWatcher OnCreated 事件快速连续写入文件

[英]C# writing to file in quick succession using FileWatcher OnCreated event

我有一个网络核心控制台,它监视文件夹中的新文件(OnCreated 事件),并在看到更改时写入日志文件。

日志是这样写的:

try
{                
    File.WriteAllText(Path.Combine("c:\logs\", "mylog.txt", message);
}
catch (Exception) {
    //error
}

如果同时创建多个文件(3+),我会收到以下错误:

“该进程无法访问文件 'C:\logs\mylog.txt',因为它正被另一个进程使用”

我明白为什么会发生这种情况,但是在再次继续之前有没有办法检查文件是否正在使用?

您可以使用ReaderWriterLockSlim来允许多个线程进行读取或独占访问写入。

如果要添加到文件而不是每次都重新创建它,还应该使用 AppendAllText 而不是 WriteAllText。

您的代码将如下所示

public class LogWriter
{
    private readonly ReaderWriterLockSlim WriteLock = new ();
    
    public void WriteMessage(string message)
    {
        WriteLock.EnterWriteLock();

        try
        {
            File.AppendAllText(@"c:\logs\mylog.txt", message);
        }
        finally
        {
            WriteLock.ExitWriteLock();
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM