Advertisement
Guest User

Untitled

a guest
Jan 10th, 2018
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.08 KB | None | 0 0
  1. #include <windows.h>
  2. #include <iostream>
  3. #include <string>
  4. #include <locale>
  5. #include <tchar.h>
  6.  
  7. void RefreshDirectory(LPCWSTR);
  8. _In_ LPCWSTR userpath0, userpath1;
  9.  
  10. using namespace std;
  11.  
  12. void _tmain(int argc, TCHAR *argv[])
  13. {
  14.     setlocale(LC_ALL, "Russian");
  15.     DWORD dwWaitStatus;
  16.     HANDLE dwChangeHandles[2]; // два дескриптора
  17.  
  18.     wstring newpath0, newpath1; // переменные для двух путей
  19.     getline(wcin, newpath0); // пути указывает пользователь
  20.     getline(wcin, newpath1);
  21.     userpath0 = newpath0.c_str();
  22.     userpath1 = newpath1.c_str();
  23.  
  24.     // дескриптор для отслеживания первой директории на создание
  25.     // удаление файлов и изменение их имен.
  26.  
  27.     dwChangeHandles[0] = FindFirstChangeNotification(
  28.         userpath0,                 // директория для просмотра
  29.         FALSE,                       // не просматривать поддиректории
  30.         FILE_NOTIFY_CHANGE_FILE_NAME); // отслеживать изм. файлов
  31.  
  32.     if (dwChangeHandles[0] == INVALID_HANDLE_VALUE)
  33.         ExitProcess(GetLastError());
  34.  
  35.     // дескриптор для отслеживания второй директории на создание, удаление
  36.     // директорий и изменение их имен.
  37.  
  38.     dwChangeHandles[1] = FindFirstChangeNotification(
  39.         userpath1,                   // директория для просмотра
  40.         TRUE,                          // просматривать поддиректории
  41.         FILE_NOTIFY_CHANGE_DIR_NAME);  // отслеживать изм. директорий
  42.  
  43.     if (dwChangeHandles[1] == INVALID_HANDLE_VALUE)
  44.         ExitProcess(GetLastError());
  45.  
  46.     // Ожидаем уведомления от дескрипторов и производим необходимое обновление.
  47.  
  48.     while (TRUE)
  49.     {
  50.         // Ждём уведомления.
  51.  
  52.         dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, FALSE, INFINITE);
  53.  
  54.         switch (dwWaitStatus)
  55.         {
  56.         case WAIT_OBJECT_0:
  57.  
  58.             // В первом пути был создан или удалён файл.
  59.             // Обновляем эту директорию и перезапускаем уведомление.
  60.  
  61.             RefreshDirectory(userpath0);
  62.                 if (FindNextChangeNotification(
  63.                     dwChangeHandles[0]) == FALSE)
  64.                     ExitProcess(GetLastError());
  65.             break;
  66.  
  67.         case WAIT_OBJECT_0 + 1:
  68.  
  69.             // Во втором пути была создана или удалена директория.
  70.             // Обновляем директорию и перезапускаем уведомление.
  71.  
  72.             RefreshDirectory(userpath1);
  73.             if (FindNextChangeNotification(
  74.                 dwChangeHandles[1]) == FALSE)
  75.                 ExitProcess(GetLastError());
  76.             break;
  77.  
  78.         default:
  79.             ExitProcess(GetLastError());
  80.         }
  81.     }
  82. }
  83.  
  84. void RefreshDirectory(LPCWSTR lpDir)
  85. {
  86.     _tprintf(TEXT("Directory (%s) changed.\n"), lpDir);
  87.     if (lpDir == userpath0)
  88.     cout << "Изменен файл" << endl;
  89.     else cout << "Изменена директория" << endl;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement