c#记录另一个记录器使用的文件

时间:2015-02-02 15:00:11

标签: c# logging synchronization

我正在尝试将日志写入日志文件,该日志文件当前正由另一个进程使用记录器(第二个记录器使用以下代码用C编写:

::CreateFile(m_fileName.c_str(), GENERIC_WRITE, FILE_SHARE_WRITE|FILE_SHARE_READ, NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL ); 
::WriteFile(handle(handle), s.data(), (DWORD)s.size(), &written, NULL) 
::FlushFileBuffers(handle(handle)) 

并且永远不会关闭)。 我的自定义记录器还需要写入同一个日志文件。有没有办法在C#中使用锁等同步技术实现这一目标?目前我正在使用:

打开文件
File.Open(filename, FileMode.Open, FileAccess.Write, FileShare.ReadWrite);

并且能够将一些信息写入日志,但它出现在上一次出现的中间的随机位置,因此日志变得一团糟。

1 个答案:

答案 0 :(得分:1)

您已经注意到,您可以从多个进程打开并写入同一文件。输出当然是随机交错的。

单个写入是原子的,因为单个写入的字节将连续出现,因此确保每个日志项都在单个写入操作中写入就足够了。注意,FileStream执行内部缓冲。您需要通过将缓冲区大小设置为1(最小值)来禁用它。

如果您不能或不想确保需要同步。使用命名的互斥锁很容易实现跨进程同步。