2014-10-04 50 views
1

C++在Windows 7中。 当写入我的日志文件时,我有时会设置一个断点,或者程序停滞不前。当我尝试在另一个程序的日志文件中查看时,它会显示“该文件无法打开,因为它正在被另一个进程使用”。那么这是真的,但是我已经与其他程序一起工作,仍然允许在写入日志文件时读取它,所以我知道它应该是可能的。尝试_fsopen和解锁文件,但没有成功。如何在C++中写入文件而不锁定它?

FILE* logFile; 
//fopen_s(&logFile, "log.log", "w"); 
logFile = _fsopen("log.log", "w", _SH_DENYNO); 

if (!logFile) 
    throw "fopen"; 

_unlock_file(logFile); 

回答

5

如果您使用完全共享模式打开日志文件,其他人仍会停止打开以进行独占访问或拒绝写入。

似乎第二个程序想要more access than would be compatible

此外,我想你只想追加到日志,use mode "a" instead of "w"

最后,do not call _unlock_file unless you called _lock_file on the same file previously


有一种方法做你想要什么,虽然:

打开你的文件,没有任何接入,然后用Opportunistic Locks

Raymond Chen的博客旧事新也有一个很好的例子:http://blogs.msdn.com/b/oldnewthing/archive/2013/04/15/10410965.aspx

相关问题