我正在尝试将日志写入日志文件,该日志文件当前正由另一个进程使用记录器(第二个记录器使用以下代码用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);
并且能够将一些信息写入日志,但它出现在上一次出现的中间的随机位置,因此日志变得一团糟。
答案 0 :(得分:1)
您已经注意到,您可以从多个进程打开并写入同一文件。输出当然是随机交错的。
单个写入是原子的,因为单个写入的字节将连续出现,因此确保每个日志项都在单个写入操作中写入就足够了。注意,FileStream执行内部缓冲。您需要通过将缓冲区大小设置为1
(最小值)来禁用它。
如果您不能或不想确保需要同步。使用命名的互斥锁很容易实现跨进程同步。