2014-10-04 83 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