На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
! Правила раздела "Наши Исходники"
Раздел предназначен для публикации различных исходников и программных решений (в виде исходных текстов), которые Вы считаете достойными внимания и/или интересными. Язык исходника значения не имеет. Это может быть C/C++, Pascal, Perl, PHP, C#, Foth, Prolog или любой другой существующий язык программирования. Единственный момент – в названии темы этот язык должен быть указан. Например, «[C++] Представление чисел в римской записи». Сам исходный текст должен содержаться в первом посте темы. Если исходник занимает не больше одного-двух экранов, то допустимо его публикация непосредственно в посте. Иначе исходный текст должен быть прикреплен к посту в виде архива. Кроме того, первый пост должен содержать:

- Информацию о платформе/компиляторе, для которых предназначен исходный текст (если эта информация существенна)
- Ссылку на оригинал и автора (если публикуется чужой исходный текст)
- Максимально подробное описание – какую задачу решает опубликованный исходный текст, и чем он интересен.

Плагиат крайне не приветствуется. Также не приветствуется публикация исходных текстов вирусов, крэков и т. п. информации. Это элементарно противозаконно.

Для быстрого поиска нужного исходника можно воспользоваться навигатором:
Быстрый поиск по разделу
Модераторы: Flex Ferrum
  
> [C++] Наблюдение за директорией, Windows NT
    Ключевые слова: C++, cpp, Windows NT, WinAPI, ReadDirectoryChangesW.
    Пример использования класса-обёртки над ReadDirectoryChangesW, для отслеживания изменений в контролируемой директории. В примере используется только один из возможных фильтров - появление/удаление/переименование файлов.
    Поддерживается unicode.

    ExpandedWrap disabled
      #include "stdafx.h"
       
      #define _WIN32_WINNT 0x0400
      #include <Windows.h>
      #include "xDirWatcher.hpp"
      #include <conio.h>
      #include <iostream>
       
       
      #ifdef _UNICODE
      #define console  std::wcout
      #else
      #define console  std::cout
      #endif
       
      class WatchNewFiles : CxDirWatcher
      {
      private:
          virtual void OnError(
              IN ErrorCode eCode,
              IN DWORD dwWindowsGLE
              )
          {
              console << _T( "OnError: ") << ErrorCodeToDesc( eCode) << _T( ", GLE = ") << dwWindowsGLE << std::endl;
          }
       
          virtual void    OnChange(
              IN const std::basic_string< TCHAR > stWatcherDir,
              IN const std::vector< NotifyParam > &vChanges
              )
          {
              for( std::vector< NotifyParam >::const_iterator iterC = vChanges.begin(); iterC != vChanges.end(); ++iterC)
              {
                  LPCTSTR szAction = _T( "Unknown action: ");
                  switch( iterC->Action())
                  {
                  case NACTION_ADDED:
                      szAction = _T( "File added: ");
                      break;
       
                  case NACTION_REMOVED:
                      szAction = _T( "File removed: ");
                      break;
       
                  case NACTION_RENAMED_OLD_NAME:
                      szAction = _T( "File renamed (old name): ");
                      break;
       
                  case NACTION_RENAMED_NEW_NAME:
                      szAction = _T( "File renamed (new name): ");
                      break;
                  }
                  console << szAction << std::endl;
                  console << _T( "  ") << stWatcherDir << iterC->FileName() << std::endl;
              }
          }
       
       
      public:
          BOOL    Start( IN LPCTSTR szDirectory, OPTIONAL BOOL fWatchSubdirs = TRUE)
          {
              StartRetCode eRet = CxDirWatcher::Start( szDirectory, FILE_NOTIFY_CHANGE_FILE_NAME, fWatchSubdirs);
              if( eRet != SRC_SUCCESS)
                  console << _T( "Error starting. Base class error code: ") << int( eRet) << std::endl;
              return eRet == SRC_SUCCESS;
          }
      };
       
       
      int _tmain(int argc, _TCHAR* argv[])
      {
          WatchNewFiles object;
          if( object.Start( _T( "C:\\")))
          {
              while( !_kbhit()) Sleep( 100);
          }
          return 0;
      }


    Сам класс-обёртка:
    Прикреплённый файлПрикреплённый файлxDirWatcher.zip (3.77 Кбайт, скачиваний: 550)
    1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0680 ]   [ 14 queries used ]   [ Generated: 19.06.19, 19:39 GMT ]