我的应用程序中有4个不同的线程,这些线程将日志写入单个文本文件。
我在所有不同的线程中都使用了锁定功能,可以正确地写入文件,并且可以按预期工作,不会出现问题。代码如下:
lock(fileLocker)
{
using(StreamWriter sw = File.Append("log.txt"))
{
sw.WriteLine("some text");
}
}
当有人尝试从Windows资源管理器访问文件或即使用户从Windows资源管理器访问文件的属性时,上述代码也会在File.append处引发错误(文件正在由另一个进程使用)。
任何想法,如何避免这种情况。预先感谢!
答案 0 :(得分:1)
您可以尝试将日志添加到ConcurrentQueue中,并让一个单独的工作线程观察此队列。每当添加新条目时,它都可以先锁定文件,然后再从队列中写入所有当前条目(每次成功写入均应从队列中删除)。但是,如果它无法锁定文件或写入,则应该处理该异常,然后再次尝试。
中看到文件锁定答案 1 :(得分:-1)
如果文件正在使用中,则无法写入。您只能稍等片刻然后重试。