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

Col*_*acX 2 c++ windows file-io locking file

C++在Windows 7中.当写入我的日志文件时,我有时会设置断点,或者程序卡在某些东西上.当我在另一个程序中尝试查看我的日志文件时,它说"文件无法打开,因为它正被另一个进程使用".嗯,这是真的,但我已经与其他程序一起工作,仍然允许在写入时从日志文件中读取,所以我知道它应该是可能的.尝试_fsopen并解锁文件但没有成功.

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

if (!logFile)
    throw "fopen";

_unlock_file(logFile);
Run Code Online (Sandbox Code Playgroud)

Ded*_*tor 5

如果您使用完全共享模式打开了日志文件,则其他人仍然无法打开以进行独占访问,或者使用拒绝写入.

似乎第二个程序需要比兼容更多的访问权限.

另外,我猜你只想附加到日志,使用模式"a"而不是"w".

最后,除非您之前调用过同一个文件,否则不要调用_unlock_file_lock_file.


有一种方法可以做你想要的事情:

无任何访问权限打开文件,然后使用机会锁.

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