我的 C# DLL 配置 NLog 以保存到文件:
private static void SetupLogging()
{
var Config = new NLog.Config.LoggingConfiguration();
var logfile = new NLog.Targets.FileTarget("logfile")
{
FileName = m_LogFile,
WriteBom = true,
Layout = "${longdate}|${level:uppercase=true}|${logger}|${message:withException=true:exceptionSeparator=|}"
};
var logconsole = new NLog.Targets.ConsoleTarget("logconsole");
Config.AddRule(LogLevel.Info, LogLevel.Fatal, logconsole);
Config.AddRule(LogLevel.Debug, LogLevel.Fatal, logfile);
LogManager.Configuration = Config;
}
我的 C++ 应用程序使用 DLL 并执行各种任务。当它检测到存在错误时,它会尝试显示错误日志。它的作用是:
CFile file{};
CFileException ex{};
if (!file.Open(filePath, CFile::modeRead, &ex))
{
TCHAR szError[_MAX_PATH]{};
ex.GetErrorMessage(&szError[0], _MAX_PATH);
AfxMessageBox(&szError[0], MB_OK | MB_ICONERROR);
return;
}
问题在于它引发了异常:
然而,当显示该消息时,我实际上可以使用记事本打开该文件。
那么我怎样才能让我的应用程序打开日志而不发生此共享冲突?
我必须更改打开日志文件的方式:
if (!file.Open(filePath, CFile::modeRead | CFile::shareDenyNone, &ex))
{
TCHAR szError[_MAX_PATH]{};
ex.GetErrorMessage(&szError[0], _MAX_PATH);
AfxMessageBox(&szError[0], MB_OK | MB_ICONERROR);
return;
}
我需要使用
CFile::shareDenyNone
(无共享限制)。