C ++在Windows 7中。 写入我的日志文件时,我有时会设置一个断点,或者程序卡在某些东西上。当我在另一个程序中尝试查看我的日志文件时,它说"该文件无法打开,因为它正在被另一个进程使用#34;。那是真的,但是我已经和其他程序一起工作了,这些程序在写入时仍然允许从日志文件中读取,所以我知道它应该是可能的。尝试了_fsopen并解锁了文件但没有成功。
FILE* logFile;
//fopen_s(&logFile, "log.log", "w");
logFile = _fsopen("log.log", "w", _SH_DENYNO);
if (!logFile)
throw "fopen";
_unlock_file(logFile);
答案 0 :(得分: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的博客 The Old New Thing 也有一个很好的例子:http://blogs.msdn.com/b/oldnewthing/archive/2013/04/15/10410965.aspx