与 Nlog 的文件共享冲突

问题描述 投票:0回答:1

我的 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;
}

问题在于它引发了异常:

enter image description here

然而,当显示该消息时,我实际上可以使用记事本打开该文件。

那么我怎样才能让我的应用程序打开日志而不发生此共享冲突?

c# visual-c++ nlog
1个回答
0
投票

我必须更改打开日志文件的方式:

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
(无共享限制)。

© www.soinside.com 2019 - 2024. All rights reserved.