Как перехватить доступ к файлу в программе .NET - PullRequest
11 голосов
/ 01 марта 2010

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

Ответы [ 5 ]

7 голосов
/ 01 марта 2010

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

Перехват доступа к файлам - это не то, что вы можете легко сделать.

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

Чего вы пытаетесь достичь, возможно, есть более простая альтернатива?

2 голосов
/ 01 марта 2010

Используя просто .net невозможно

1 голос
/ 01 марта 2010

Проверьте http://easyhook.codeplex.com/, он предоставляет вам напрямую из c # c ++, как перезапись метода dll.

1 голос
/ 01 марта 2010

Здесь очень похожая тема: Как я могу предотвратить создание папки с помощью службы Windows? . Это может дать более глубокое понимание, но @LBushkin уже предоставил тот же вывод.

0 голосов
/ 01 марта 2010

Интересный вопрос. Какой доступ? Читать, писать, удалять, копировать?

  • Если вам нужно запретить доступ к файлу, тогда безопасность будет в порядке. Затем вы можете захватить доступ и делегировать задачу более высокопривилегированному механизму выполнения. Например, служба работает как привилегированный пользователь.

  • Если вы хотите прекратить доступ на системном уровне, вам потребуется IFS фильтр .

  • Если весь доступ осуществляется через ваш код, то я бы предложил библиотеку, которая запрещает доступ.

  • И, как уже упоминали другие, есть FileSystemWatcher, но я думаю, что этот пост доступ не раньше.

...