2012-01-06 2 views
6

Я пытаюсь отслеживать файлы, которые копируются пользователями и другими приложениями. FileSystemWatch имеет только события для Измененных, Созданных, Удаленных, Удаленных, Ошибочных и Переименованных. Он не запускает событие, когда к файлу обращается функция копирования или где копируется новый файл.C# Трек скопированных файлов

Есть ли способ отслеживать событие/функцию копирования окон?

+0

Можете ли вы посмотреть на экземпляр буфера обмена вместо этого? Просто мысль. http://msdn.microsoft.com/en-us/library/system.windows.forms.clipboard.aspx –

+0

Насколько хорошо вы можете терпеть отказ отслеживать копию? Вы, вероятно, можете отслеживать _most_ копии (например, сделанные через Explorer), но некоторые проскальзывают. –

+0

Почему вы пытаетесь это сделать? – RQDQ

ответ

4

Я не знаю, как использовать C#.

Вы можете сделать это, если хотите написать File System Filter Driver. [Территория Определенно эксперт, так как есть возможность для развращает файлов и/или обрушив систему] перехватывает драйвер

Файловая система фильтров запросов, ориентированных на систему файлов или другой драйвер системного фильтра файлов. Перехватывая запрос , прежде чем он достигнет намеченной цели, драйвер фильтра может продлить или заменить функциональность, предоставленную исходной целью запроса . Примеры драйверов фильтра файловой системы включают в себя антивирусные фильтры , агенты резервного копирования и продукты шифрования. Для разработки файловых систем и драйверов фильтров файловой системы используйте комплект IFS (Installable File ), который поставляется вместе с набором драйверов Windows (WDK).

+1

Драйвер фильтра может отслеживать отдельные операции чтения и записи, но не может установить связь между двумя. Определить копирование невозможно определенным образом. –

1

Вы делаете правильную вещь с FileSystemWatcher. Windows не имеет встроенного механизма для надежного представления отчетов.

Вы можете подключить подпрограмму копирования ОС, но это не гарантирует хороших результатов: приложения могут свободно выполнять свою собственную копию, просто открывая исходные и целевые файлы и копируя байты.

Переименование отличается тем, что переименование, выполняемое ОС, невозможно легко передразнить с помощью других средств, поэтому вы сможете перехватить все переименования с помощью FileSystemWatcher. Обратите внимание, что перемещение между дисками больше похоже на копирование: вы не получите переименованное уведомление, а вместо этого создаёте и удалите.

Так что, если вы действительно должны заметить файл получать скопировал мой предложенный подход заключается в следующем:

  • Hook на CloseFile звонки, в дополнение к FileSystemWatcher.
  • Всякий раз, когда файл закрывается, это может быть связано с тем, что это источник или цель перемещения копирования/перекрестного перемещения. Проверьте его размер.
  • Если вы обнаружили два закрытых файла с одинаковым размером в течение достаточно короткого периода времени, сравните контент. Довольно ресурсоемкий, но единственный надежный способ сделать это.
0

Вы можете использовать Auditing file and folder access особенность Windows, которая записывает запись журнала событий, и вы можете программы установки для запуска, когда такое событие происходит

0

Я не могу думать о какой-либо хороший способ.

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

Смежные вопросы