Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > подскажите как правильно


Автор: nikolaich 26.3.2007, 21:52
Earnest, извиняюсь за несдержанность в своей прошлой теме, поверь - "враждебный" мир меня не пугает.

Теперь вопрос:
Есть кусок кода который должен выполняться только в том случае, когда файл, который я обрабатываю, изменился.
Немогу допереть, как это сделать. Пока, просто запускаю его таймером:
Код

int m_count=0; // количество строк в файле после последнего просмотра
int m_strCount=0; //количество строк в текущем просмотре
void CHarrisLogMonitorDlg::OnTimer(UINT_PTR nIDEvent)
{
    CStdioFile fOpen(m_fileName,CFile::modeReadWrite|CFile::shareDenyNone);
        
        CString s;
        m_edt.Clear(); 
        while(fOpen.ReadString(s))
          {
        
              m_edit+=s;
           m_edit += "\r\n";  
           m_strCount++;
             }
    if(m_count<m_strCount)    // если строк больше чем было последний раз
    {
        ...

                  // обрабатываю строку

                  ...
    }
    m_count=m_strCount;
    m_strCount=0;
    UpdateData(false);
    fOpen.Close();
    
    m_edit="";

    CDialog::OnTimer(nIDEvent);
}


Может кто знает выход получше?

Автор: Greeen 26.3.2007, 21:57
Во-первых в раздел VC++/MFC/WTL
Во-вторых посмотри в сторону FindFirstChangeNotification/FindNextChangeNotification/ReadDirectoryChanges
а именно FILE_NOTIFY_CHANGE_SIZE или FILE_NOTIFY_CHANGE_LAST_WRITE

Автор: nikolaich 26.3.2007, 22:07
Green,спасибо большое!!!

Автор: Greeen 26.3.2007, 22:08
nikolaich, всегда пожалуйста  smile 

Автор: nikolaich 26.3.2007, 22:49
Все, разобрался. Кому интересно - вот ссылка по этой теме:http://www.frolov-lib.ru/books/bsp/v26/ch5.htm

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)