Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
0 / 0 / 0
Регистрация: 12.11.2019
Сообщений: 8
1

С++ Мониторинг изменений в каталоге

05.04.2020, 14:24. Показов 969. Ответов 1
Метки с++ (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день,ребят помогите (на С++ пишу впервые).Нужно отслеживать изменения в каталоге, результаты изменений записывать в файл или выводить в консоль.На деле ничего не происходит, даже не выводит сообщение об начале мониторинга.Некоторые моменты переписывал с Си. Где ошибся подскажите.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <fstream>
using namespace std;
int main()
{ 
    setlocale(LC_ALL, "rus");
    //Create file
    ofstream file("test111.txt");
    
    
    LPCTSTR dir= TEXT("D:\\Games");
    HANDLE Directori = CreateFile(dir ,
        GENERIC_WRITE|GENERIC_READ,
        FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS,
        NULL );
 
    DWORD dwOffset = 0;
    char buff[1024*128];
    DWORD returnByte;
    BOOL result= ReadDirectoryChangesW
        (Directori,
        buff,
        sizeof(buff),
        TRUE,
        FILE_NOTIFY_CHANGE_FILE_NAME|FILE_NOTIFY_CHANGE_ATTRIBUTES|
        FILE_NOTIFY_CHANGE_SIZE|FILE_NOTIFY_CHANGE_CREATION|FILE_NOTIFY_CHANGE_DIR_NAME|
        FILE_NOTIFY_CHANGE_LAST_WRITE,
        &returnByte,
        NULL,
        NULL);
    if (!result)
        {
            cout<<"ReadyDirectoryChangesW failed with error = "<< GetLastError();
        }
    else cout<<" Read directori start "<<endl;
 
 
    while(result){
    HANDLE events[] = { Directori };
    char FullName[MAX_PATH]= {0};
    TCHAR szFileName[MAX_PATH] = {0};
    WIN32_FIND_DATA FindData;
    FILE_NOTIFY_INFORMATION* pInfo = NULL;
 
       do{
         pInfo = (FILE_NOTIFY_INFORMATION*) sizeof(dwOffset);
        WideCharToMultiByte(CP_ACP, 0, pInfo->FileName, pInfo->FileNameLength, (LPSTR)&szFileName, sizeof(szFileName) / sizeof(TCHAR), NULL, NULL);
        GetFullPathName(szFileName,MAX_PATH,(LPWSTR)&FullName,NULL);
        HANDLE findFile = FindFirstFile((LPWSTR)&FullName, &FindData);
        FindClose(findFile); 
    char *action = "*";
            switch (pInfo->Action) {
         case FILE_ACTION_ADDED: action = "A"; break; 
         case FILE_ACTION_REMOVED: action = "D"; break; 
         case FILE_ACTION_MODIFIED: action = "M"; break; 
         case FILE_ACTION_RENAMED_OLD_NAME: action = "O"; break; 
         case FILE_ACTION_RENAMED_NEW_NAME: action = "N"; break;
            }
            szFileName[pInfo->FileNameLength / 2] = 0;
      //Вывод в файл
      if(action== "A") cout<<file<<" file size  bytes "<< "Add"<< szFileName<< FindData.nFileSizeLow<<endl;
      else if (action== "D") cout<<file<<"Del"<<szFileName<<FindData.nFileSizeLow<<endl;
   else if (action== "M") file<<(file,"%s %s file size %d bytes \n", "Mod", szFileName, FindData.nFileSizeLow);
   else if (action== "O") file<<(file,"%s %s file size %d bytes \n", "Old", szFileName, FindData.nFileSizeLow);
   else if (action== "N") file<<(file,"%s %s file size %d bytes \n", "New", szFileName, FindData.nFileSizeLow);
//Одновременно может произойти несколько изменений                       
 dwOffset += pInfo->NextEntryOffset;
       }while (pInfo->NextEntryOffset != 0);
        fflush(stdout); 
    
 
    }
    CloseHandle(Directori);
    file.close();
    cin.get();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.04.2020, 14:24
Ответы с готовыми решениями:

Мониторинг изменений файлов каталога
Доброго времени суток коллеги. :) Подскажите, есть у кого может исходники подобной программы...

Мониторинг изменений в бд
Не знаю как правильно сформулировать вопрос. В вк допустим чат ведётся, человек написал, и...

Мониторинг изменений файловой системе
Помогите составить алгоритм или постановку следующей задачи(мониторинг изменений во всей файловой...

Мониторинг изменений в базах данных
Уважаемые форумчане, здравствуйте! Нужен ваш совет. Алгоритм определения изменений схемы...

1
6579 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
05.04.2020, 17:29 2
Цитата Сообщение от dragalur Посмотреть сообщение
На деле ничего не происходит, даже не выводит сообщение об начале мониторинга.Некоторые моменты переписывал с Си. Где ошибся подскажите.
Ничего не происходит, потому что ReadDirectoryChangesW ждёт, пока твоя директория изменится. Попробуй добавить туда файл.
0
05.04.2020, 17:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.04.2020, 17:29
Помогаю со студенческими работами здесь

Триггер на мониторинг изменений в таблице
Добрый день! Накидал такой код: USE GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO...

Мониторинг изменений текстового файла
Добры день. Помогите с кодом, необходимо проверять на изменение теста файл(txt) с интервалом 1 сек...

Разработать процедуру поиска заданных изменений в файле/каталоге
Доброго времени суток ! Мне дали такое задание : Ревизоры запоминают исходное состояние...

Мониторинг процессов. Как сделать запись изменений в одну строчку
Всем привет! Есть вот такая таблица. USE GO /****** Object: Table . Script Date:...

Скопировать первую строку из каждого txt-файла в каталоге и записать в новый output.txt в том же каталоге
Добрый день! Дано: c:\folder есть папка, в ней ~50000 txt файлов, каждый под своим...

Сравнить файл в каталоге со всеми остальными файлами в этом каталоге, результат вывести в txt-файл
Здравствуйте! Подскажите, как сравнить файл в каталоге со всеми остальными файлами(в этом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru