使用File.Append在C#

时间:2019-02-04 10:00:26

标签: c# multithreading

我的应用程序中有4个不同的线程,这些线程将日志写入单个文本文件。

我在所有不同的线程中都使用了锁定功能,可以正确地写入文件,并且可以按预期工作,不会出现问题。代码如下:

lock(fileLocker)
{
    using(StreamWriter sw = File.Append("log.txt"))
    {
         sw.WriteLine("some text");
    }
}

当有人尝试从Windows资源管理器访问文件或即使用户从Windows资源管理器访问文件的属性时,上述代码也会在File.append处引发错误(文件正在由另一个进程使用)。

任何想法,如何避免这种情况。预先感谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试将日志添加到ConcurrentQueue中,并让一个单独的工作线程观察此队列。每当添加新条目时,它都可以先锁定文件,然后再从队列中写入所有当前条目(每次成功写入均应从队列中删除)。但是,如果它无法锁定文件或写入,则应该处理该异常,然后再次尝试。

您可以在此答案https://stackoverflow.com/a/3279183/4731319

中看到文件锁定

答案 1 :(得分:-1)

如果文件正在使用中,则无法写入。您只能稍等片刻然后重试。