Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector <string> checkForChanges(string dir) {
- DWORD returnedB;
- BOOL result;
- char buf[2048];
- char file[MAX_PATH];
- vector <string> allChanges;
- chrono::time_point<chrono::system_clock> start, end, now;
- HANDLE hDir = CreateFile(dir.c_str(),
- GENERIC_READ | GENERIC_WRITE | FILE_LIST_DIRECTORY,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- NULL,
- OPEN_EXISTING,
- FILE_FLAG_BACKUP_SEMANTICS,
- NULL);
- if (hDir == INVALID_HANDLE_VALUE)
- {
- cout << GetLastError() << endl;
- return allChanges;
- }
- FILE_NOTIFY_INFORMATION *pNotify = (FILE_NOTIFY_INFORMATION*)buf;
- start = chrono::system_clock::now(); // Запоминаем текущее время
- end += chrono::seconds(60); // Время до конца работы цикла
- while (now < end)
- {
- now = chrono::system_clock::now(); // Сверяем время, что бы выйти из цикла после истечения 60 секунд
- result = ReadDirectoryChangesW(hDir,
- &buf,
- sizeof(buf),
- TRUE,
- FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_DIR_NAME,
- &returnedB,
- NULL,
- NULL);
- if (result) // Получили сообщение об изменении в отслеживаемой директории
- {
- memset(file, 0, strlen(file)); // Убираем мусор что бы не возникали лишние символы (Что будет без этого: Новая папкаМММММММММ)
- WideCharToMultiByte(CP_ACP, 0, pNotify->FileName, pNotify->FileNameLength / 2, file, 99, NULL, NULL); // Переводит wchar от FILE_NOTIFY_INFORMATION в char
- switch (pNotify->Action)
- {
- case FILE_ACTION_ADDED: // Если был добавлен файл или папка
- {
- string addChange = "File Added: ", to_string(file);
- allChanges.push_back(addChange);
- break;
- }
- case FILE_ACTION_REMOVED: // Если удален файл или папка
- {
- string remChange = "File Deleted: ", to_string(file);
- allChanges.push_back(remChange);
- break;
- }
- case FILE_ACTION_MODIFIED: // Если изменили файл (записали/удалили содержимое)
- {
- string modChange = "File Modified: ", to_string(file);
- allChanges.push_back(modChange);
- break;
- }
- case FILE_ACTION_RENAMED_OLD_NAME: // Если переименовали файл или папку
- {
- string renChange = "File Renamed: ", to_string(file);
- allChanges.push_back(renChange);
- break;
- }
- }
- }
- }
- for (const auto& str : allChanges) // Вывод всех изменений за 60 секунд
- {
- cout << str << endl;
- }
- CloseHandle(hDir);
- return allChanges;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement