Как спроектировать средство просмотра файлов / каталогов в VC ++? - PullRequest
3 голосов
/ 04 января 2011

Я новичок в VC ++ и программировании. У меня есть задача, в которой я должен создать средство просмотра файлов в VC ++.

Проблема заключается в следующем:

Я должен постоянно следить за некоторыми файлами журналов; всякий раз, когда конкретный файл журнала удаляется (это удаление выполняется какой-либо другой программой), я должен открыть TextFile и записать в него некоторые данные и метку времени.

Как мне это сделать? Пожалуйста, помогите !!

Ответы [ 4 ]

1 голос
/ 04 января 2011

Во-первых, вам нужно настроить систему для отслеживания событий файлов из этой папки. Для начала взгляните на FindFirstChangeNotification ().

Вы в основном получите ожидаемую ручку от этого.

Тогда, если бы это был я, у меня была бы нить, ожидающая этого события. Каждый раз, когда происходит событие, поток возобновляет работу, запрашивает сведения об изменении (какой файл), затем выполняет необходимые действия и снова возобновляет спящий режим для этого дескриптора.

Вам понадобится дополнительный семафор или что-то еще, чтобы использовать его, чтобы прервать этот рабочий поток и разбудить его, чтобы вы могли сказать ему выйти. Это просто сделать: сделать основной цикл вашего потока WaitForMultipleObjects - семафором пробуждения и дескриптором FindFirstChangeNotification. Когда вы просыпаетесь, проверьте, кто даже уведомил вас, затем либо обработайте изменение файла, либо выйдите.

0 голосов
/ 05 января 2011

Я настоятельно рекомендую вам рассмотреть возможность использования здесь .Этот API не на 100% надежен, но этот код хорошо справляется со своей задачей.Если трафик вашей файловой системы локальный и не слишком частый, он должен хорошо работать для вас.

0 голосов
/ 04 января 2011

Попробуйте инструментарий управления Windows (WMI), если у вас достаточно прав.AFAIK это также самый эффективный способ обработки событий файловой системы.Обработайте или запросите __InstanceDeletionEvent, __InstanceModificationEvent или __InstanceCreationEvent для событий удаления, изменения или создания соответственно и отфильтруйте нужные файлы и целевой путь.

Посмотрите на вызов WMI Reference / C ++.

В полномасштабном примере посмотрите на пример запроса кода проекта .

0 голосов
/ 04 января 2011

MFC имеет немного другой способ обработки (немного), но чтобы сделать это с помощью Win32 API, вы должны использовать Функции управления каталогами , чтобы настроить дескриптор уведомления об изменении длядиректории, в которую входит файл. Затем вы можете ждать на дескрипторе, и когда что-то происходит внутри этой директории, ваше ожидание завершается, и вы можете проверить, было ли это изменение файла, который вас волнует.

Посмотритев документах для FindFirstChangeNotification и ReadDirectoryChangesW для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...