Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <iostream>
- #include <string>
- #include <locale>
- #include <tchar.h>
- void RefreshDirectory(LPCWSTR);
- _In_ LPCWSTR userpath0, userpath1;
- using namespace std;
- void _tmain(int argc, TCHAR *argv[])
- {
- setlocale(LC_ALL, "Russian");
- DWORD dwWaitStatus;
- HANDLE dwChangeHandles[2]; // два дескриптора
- wstring newpath0, newpath1; // переменные для двух путей
- getline(wcin, newpath0); // пути указывает пользователь
- getline(wcin, newpath1);
- userpath0 = newpath0.c_str();
- userpath1 = newpath1.c_str();
- // дескриптор для отслеживания первой директории на создание
- // удаление файлов и изменение их имен.
- dwChangeHandles[0] = FindFirstChangeNotification(
- userpath0, // директория для просмотра
- FALSE, // не просматривать поддиректории
- FILE_NOTIFY_CHANGE_FILE_NAME); // отслеживать изм. файлов
- if (dwChangeHandles[0] == INVALID_HANDLE_VALUE)
- ExitProcess(GetLastError());
- // дескриптор для отслеживания второй директории на создание, удаление
- // директорий и изменение их имен.
- dwChangeHandles[1] = FindFirstChangeNotification(
- userpath1, // директория для просмотра
- TRUE, // просматривать поддиректории
- FILE_NOTIFY_CHANGE_DIR_NAME); // отслеживать изм. директорий
- if (dwChangeHandles[1] == INVALID_HANDLE_VALUE)
- ExitProcess(GetLastError());
- // Ожидаем уведомления от дескрипторов и производим необходимое обновление.
- while (TRUE)
- {
- // Ждём уведомления.
- dwWaitStatus = WaitForMultipleObjects(2, dwChangeHandles, FALSE, INFINITE);
- switch (dwWaitStatus)
- {
- case WAIT_OBJECT_0:
- // В первом пути был создан или удалён файл.
- // Обновляем эту директорию и перезапускаем уведомление.
- RefreshDirectory(userpath0);
- if (FindNextChangeNotification(
- dwChangeHandles[0]) == FALSE)
- ExitProcess(GetLastError());
- break;
- case WAIT_OBJECT_0 + 1:
- // Во втором пути была создана или удалена директория.
- // Обновляем директорию и перезапускаем уведомление.
- RefreshDirectory(userpath1);
- if (FindNextChangeNotification(
- dwChangeHandles[1]) == FALSE)
- ExitProcess(GetLastError());
- break;
- default:
- ExitProcess(GetLastError());
- }
- }
- }
- void RefreshDirectory(LPCWSTR lpDir)
- {
- _tprintf(TEXT("Directory (%s) changed.\n"), lpDir);
- if (lpDir == userpath0)
- cout << "Изменен файл" << endl;
- else cout << "Изменена директория" << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement