Сбой при мониторинге файла журнала (C++)

Я читаю файл журнала, который постоянно записывается каким-то процессом установки. Однако в некоторых случаях я получаю случайный сбой по следующей причине:

Crash reason:  EXCEPTION_ACCESS_VIOLATION_READ

У меня есть пара вопросов относительно этого

1: Если вы видите следующий код, я пытаюсь обработать любые исключения, возникающие во время чтения. Так почему же EXCEPTION_ACCESS_VIOLATION_READ не попадает и программа падает.

2: похоже, что это происходит, потому что установщик пишет в файл в то же время, когда я читаю файл. wxTextFile не позволяет мне режим, в котором открыть файл. Итак, если я использую какую-то функцию C и открываю файл в режиме READ_ONLY, может ли этот сбой все же произойти?

Ниже приведен мой код:

wxTextFile file( wxT("C:\\logfile.log") );    
WriteLog(wxT("Will start monitoring log file."));

while(true)
{   
    if(file.Exists())
    {
        try
        {
            if(file.Open())
            {
                wxString str = file.GetLastLine();
                WriteLog(wxT("Got::")+str);
                file.Close();


            }
        }
        catch(...)
        {
            WriteLog(wxT("CRASH: something went wrong::MonitorLogFile()"));
        }
    }

    //Exit if needed

    Sleep(1500);
}

1 ответ

Я верю, что за 14 дней твоя проблема решена, не так ли?

У меня есть ощущение (я мало знаю о wxWidgets), что ваш компилятор выполняет здесь добавление адреса

WXT("Got::")+ ул

попробуйте изменить это на 2 реальных строки

такое wxT() вызов макроса, который разрешается в L""? если это так, то у вас есть проблема, и вы должны изменить код для выполнения конкатата строки, используя реальный строковый объект (не текст макроса) + второй строковый объект, в этот момент вы используете + как перегрузку оператора, а не как сумма адресов, как я подозреваю

С уважением

Другие вопросы по тегам