Advertisement
Guest User

Untitled

a guest
Jul 20th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.74 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <string>
  4. #include <thread>
  5. #include <chrono>
  6.  
  7. using namespace std;
  8.  
  9.  
  10. string getDirectory() {
  11.     TCHAR buffer[MAX_PATH];
  12.     GetCurrentDirectory(sizeof(buffer), buffer);
  13.     string projDir = buffer;
  14.     return projDir;
  15. }
  16.  
  17. void checkForChanges(string dir) {
  18.     DWORD returnedB;
  19.     BOOL result;
  20.     char buf[MAX_PATH];
  21.     char file[MAX_PATH];
  22.  
  23.     HANDLE hDir = CreateFile(dir.c_str(),
  24.         GENERIC_READ | GENERIC_WRITE | FILE_LIST_DIRECTORY,
  25.         FILE_SHARE_READ | FILE_SHARE_WRITE,
  26.         NULL,
  27.         OPEN_EXISTING,
  28.         FILE_FLAG_BACKUP_SEMANTICS,
  29.         NULL);
  30.     if (hDir == INVALID_HANDLE_VALUE)
  31.     {
  32.         cout << GetLastError() << endl;
  33.         return;
  34.     }
  35.  
  36.     FILE_NOTIFY_INFORMATION *pNotify = (FILE_NOTIFY_INFORMATION*)buf;
  37.     this_thread::sleep_for(chrono::seconds(60));
  38.     while (true)
  39.     {
  40.         cout << "Successfully launched!" << endl;
  41.  
  42.         result = ReadDirectoryChangesW(hDir,
  43.             &buf,
  44.             sizeof(buf),
  45.             TRUE,
  46.             FILE_NOTIFY_CHANGE_FILE_NAME | FILE_NOTIFY_CHANGE_SIZE | FILE_NOTIFY_CHANGE_DIR_NAME,
  47.             &returnedB,
  48.             NULL,
  49.             NULL);
  50.         if (result) // Получили сообщение об изменении в отслеживаемой директории
  51.         {
  52.             memset(file, 0, strlen(file)); // Убираем мусор что бы не возникали лишние символы (Что будет без этого: Новая папкаМММММММММ)
  53.             WideCharToMultiByte(CP_ACP, 0, pNotify->FileName, pNotify->FileNameLength / 2, file, 99, NULL, NULL); // Переводит wchar от FILE_NOTIFY_INFORMATION в char
  54.             switch (pNotify->Action)
  55.             {
  56.             case FILE_ACTION_ADDED: // Если был добавлен файл или папка
  57.                 cout << "File Added: " << file << endl;
  58.                 break;
  59.             case FILE_ACTION_REMOVED: // Если удален файл или папка
  60.                 cout << "File Deleted: " << file << endl;
  61.                 break;
  62.             case FILE_ACTION_MODIFIED: // Если изменили файл (записали/удалили содержимое)
  63.                 cout << "File Modified: " << file << endl;
  64.                 break;
  65.             case FILE_ACTION_RENAMED_OLD_NAME: // Если переименовали файл или папку
  66.                 cout << "File Renamed: " << file << endl;
  67.                 break;
  68.             default:
  69.                 cout << "Unknown" << endl;
  70.                 break;
  71.             }
  72.         }
  73.     }
  74.     CloseHandle(hDir);
  75.     return;
  76. }
  77.  
  78.  
  79. int main() {
  80.     setlocale(LC_ALL, ""); // Для корректного отображения символов в консоли
  81.     string dir = getDirectory() + "\\check"; // Получаем директорию папки check
  82.     cout << "Will check the changes in: " << dir << endl;
  83.     checkForChanges(dir); // Запускаем отслеживание изменений в полученной директории
  84.     return 0;
  85. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement