Я читаю файл журнала, который постоянно записывается каким-то процессом установки. Однако в некоторых случаях я получаю случайный сбой по следующей причине:
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);
}
Я верю, что за 14 дней твоя проблема решена, не так ли?
У меня есть ощущение (я мало знаю о wxWidgets), что ваш компилятор выполняет здесь добавление адреса
WXT ( «Got ::») + ул
попробуйте изменить это на 2 реальных строки
такое wxT () вызов макроса, который разрешается в L «»? если это так, то у вас возникла проблема, и вы должны изменить код для выполнения конкатата строки, используя реальный строковый объект (не текст макроса) + второй строковый объект, в этот момент вы используете + как перегрузку оператора, а не как сумма адресов, как я подозреваю
С уважением