C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  01.05.2010 — Update World C++: Сборник GPL QT исходников
  15.12.2007 — Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Хостинг:
Windows 2003, ASP.NET 2.0
бесплатный и от 80 руб./мес


   Отправить письмо
Кулабухов Артем, Беларусь




 CFileWatch / Файлы, папки, диски / Файловая система

CFileWatch


Автор: Herbert Griebel.

Требования: VC6 SP4 Win2000

Данный класс поможет Вам отслеживать изменения в файлах наподобие DevStudio. Если файл будет модифицирован другим приложением, то выскочит окошко информирующее Вас об этом.

Итак, внесём некоторые изменения в ViewClass и DocumentClass:

В заголовок класса документа:

class CFileWatchAppDoc : public CRichEditDoc
{
    ....
public:
    void OnFileReload();
protected:
    DWORD m_hFileWatch;
};

В исходник класса документа:

#include "FileWatch.h"

CFileWatchAppDoc::CFileWatchAppDoc()
{
    m_hFileWatch = NULL;
}

CFileWatchAppDoc::~CFileWatchAppDoc()
{
    CFileWatch::RemoveHandle(m_hFileWatch);
}

BOOL CFileWatchAppDoc::OnSaveDocument(LPCTSTR lpszPathName) 
{
    CFileWatch::RemoveHandle(m_hFileWatch);
    BOOL bSuccess = CRichEditDoc::OnSaveDocument(lpszPathName);
    m_hFileWatch = CFileWatch::AddFileFolder(lpszPathName, NULL, 
                                             this, 0);
    return bSuccess;
}

void CFileWatchAppDoc::SetPathName(LPCTSTR lpszPathName, 
                                      BOOL bAddToMRU)
{
    CFileWatch::RemoveHandle(m_hFileWatch);
    m_hFileWatch = CFileWatch::AddFileFolder(lpszPathName, 
                                             NULL, this, 0);
    CRichEditDoc::SetPathName(lpszPathName, bAddToMRU);
}

void CFileWatchAppDoc::OnFileReload()
{
    SetModifiedFlag(FALSE);
    if (CDocument::OnOpenDocument(GetPathName()))
        UpdateAllViews(NULL);
}

В заголовочный файл view-класса:

 

class CFileWatchAppView : public CRichEditView {     ... protected:      //{{AFX_MSG(CFileWatchAppView)      //}}AFX_MSG     afx_msg LRESULT OnFileWatchNotification(WPARAM wParam,     LPARAM lParam);      DECLARE_MESSAGE_MAP() };

В исходник view-класса:

BEGIN_MESSAGE_MAP(CFileWatchAppView, CRichEditView)
  //{{AFX_MSG_MAP(CFileWatchAppView)
  //}}AFX_MSG_MAP
  ON_THREAD_MESSAGE(WM_FILEWATCH_NOTIFY, OnFileWatchNotification)
END_MESSAGE_MAP()

LRESULT CFileWatchAppView::OnFileWatchNotification(WPARAM wParam, 
                                                   LPARAM lParam)
{
    LPCTSTR lpszPathName = (LPCTSTR)lParam;

    if (AfxMessageBox(GetDocument()->GetPathName()+
         "\n\nThis file has been modified outside of the editor." +
         "\nDo you want to reload it and lose all the changes made?",
         MB_YESNO|MB_ICONQUESTION)==IDYES)

              GetDocument()->OnFileReload();

    return 0;
}

Будьте осторожны: Тестовая функция void CFileWatchAppDoc::OnFileModify() не будет работать!

 

Downloads

Скачать демонстрационный проект - 60 Kb
Скачать исходник - 3 Kb