Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <Windows.h>
- #include <string>
- #include <thread>
- #include <chrono>
- using namespace std;
- string getDirectory() {
- TCHAR buffer[MAX_PATH];
- GetCurrentDirectory(sizeof(buffer), buffer);
- string projDir = buffer;
- return projDir;
- }
- void checkForChanges(string dir) {
- DWORD returnedB;
- BOOL result;
- char buf[MAX_PATH];
- char file[MAX_PATH];
- 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;
- }
- FILE_NOTIFY_INFORMATION *pNotify = (FILE_NOTIFY_INFORMATION*)buf;
- this_thread::sleep_for(chrono::seconds(60));
- while (true)
- {
- cout << "Successfully launched!" << endl;
- 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: // Если был добавлен файл или папка
- cout << "File Added: " << file << endl;
- break;
- case FILE_ACTION_REMOVED: // Если удален файл или папка
- cout << "File Deleted: " << file << endl;
- break;
- case FILE_ACTION_MODIFIED: // Если изменили файл (записали/удалили содержимое)
- cout << "File Modified: " << file << endl;
- break;
- case FILE_ACTION_RENAMED_OLD_NAME: // Если переименовали файл или папку
- cout << "File Renamed: " << file << endl;
- break;
- default:
- cout << "Unknown" << endl;
- break;
- }
- }
- }
- CloseHandle(hDir);
- return;
- }
- int main() {
- setlocale(LC_ALL, ""); // Для корректного отображения символов в консоли
- string dir = getDirectory() + "\\check"; // Получаем директорию папки check
- cout << "Will check the changes in: " << dir << endl;
- checkForChanges(dir); // Запускаем отслеживание изменений в полученной директории
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement