ColacX
ColacX

Reputation: 4042

How to write to file in C++ without locking it?

C++ In Windows 7. When writing to my log file, i sometimes set a breakpoint, or the program gets stuck at something. When i try too peek in my logfile from another program it says "The file cannot be opened because it is in use by another process". Well thats true, however I've worked with other programs that still allows reading from a logfile while they are writing to it, so I know it should be possible. Tried the _fsopen and unlocking the file but without success.

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

if (!logFile)
    throw "fopen";

_unlock_file(logFile);

Upvotes: 2

Views: 2613

Answers (1)

Deduplicator
Deduplicator

Reputation: 45684

If you have the log-file open with full sharing-mode, others are still stopped from opening for exclusive access, or with deny-write.

Seems the second program wants more access than would be compatible.

Also, I guess you only want to append to the log, use mode "a" instead of "w".

Last, do not call _unlock_file unless you called _lock_file on the same file previously.


There is a way to do what you want though:

Open your file without any access, and then use Opportunistic Locks.

Raymond Chen's blog The Old New Thing also has a nice example: https://devblogs.microsoft.com/oldnewthing/20130415-00/?p=4663

Upvotes: 5

Related Questions