如何在不锁定的情况下用C ++写入文件?

时间:2014-10-04 23:30:07

标签: c++ windows file file-io locking

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);

1 个答案:

答案 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