如何在多个进程使用时写入txt文件?C#

Tes*_*nja 6 .net c# locking

我有一个尝试写日志文件的记录器.问题似乎是当有多个进程访问同一个日志文件时,记录器无法写入日志文件,导致错误"另一个进程正在使用该文件...",导致关键信息丢失.我尝试过使用锁,但它似乎不起作用,因为它们是独立的进程(我认为这就是它们不起作用的原因).有没有办法让多个进程访问文件而不会丢失信息?如果没有,还有其他选择吗?谢谢.

LB2*_*LB2 5

你的选择没有特别的顺序:

  1. 让不同的进程写入不同的日志文件.如果需要,让这些进程在某个时刻(如午夜)滚动文件,并让另一个进程占用昨天的日志并将它们合并在一起.
  2. 如果您拥有/控制您的记录器基础结构并且必须写入同一个日志文件,请查看使用命名的互斥锁.命名互斥锁是系统互斥锁,可以跨进程边界共享.链接中的代码示例显示了如何在进程之间共享相同的互斥锁.
    • 正如Florian F在评论中建议的那样,使用log4net可以做到这一点(不止一种方式,包括使用命名的互斥锁).他们的常见问题解答正确地指出,如果你这样做,就存在性能问题.
  3. 有一些方法可以对文件进行共享读取和共享写入,然后可以锁定文件的某些区域.您可以尝试多个进程并同步谁写入文件的哪些区域,相应地锁定,等等.但是这样做是非常痛苦的,并且会高度反对它.
  4. 使用syslog服务器.
  5. 使用log4net的远程日志记录功能.