[英]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.