Триггер, когда пользователь удаляет файл - PullRequest
0 голосов
/ 07 февраля 2020

Для воспроизведения звука моя программа c# должна запускаться каждый раз, когда пользователь удаляет файл через проводник в windows.

Как я могу это сделать? Это вообще возможно?

Правки:

Чтобы уточнить: я хочу, чтобы это был какой-то системный хук. Поэтому не должно иметь значения, где файл удален.

Я пробовал это:

m_watcher = new FileSystemWatcher();
m_watcher.Path = @"C:\";
m_watcher.Filter = "*.*";
m_watcher.IncludeSubdirectories = true;
m_watcher.EnableRaisingEvents = true;

m_watcher.Deleted += M_watcher_Deleted;

private void M_watcher_Deleted(object sender, FileSystemEventArgs e)
{
    Debug.WriteLine("deleted");
}

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

Ответы [ 2 ]

1 голос
/ 07 февраля 2020

Не существует отдельного API для «действий файловой системы, инициированных пользователем» и «действий файловой системы, инициированных некоторой автоматической c системой». Это не должно вызывать удивления, так как в первую очередь нет объективного способа оценить разницу.

Если я использую проводник для перемещения файла, это действие пользователя или действия системы (я сказал " переместить файл ", а не" скопировать сюда, удалить там ")? Если у меня есть программа для редактирования текста и я сохраняю файл, это действие пользователя или действия системы? Если редактор также сохраняет файл резервной копии, это действие пользователя или действие системы? Если ОС также хранит свою собственную историю файлов?

Я думаю, мы можем согласиться с тем, что здесь есть скользящая шкала - первый случай наиболее явно связан с пользователем, а последний наиболее явно "за кадром" , Но они все инициированы пользователем. И это только с одним файлом, на который "напрямую" воздействуют.

Система не отслеживает серию решений и действий, которые привели к работе файловой системы (и если это так, интерпретация удачи что любым полезным способом). Например, он знает, какой процесс инициировал операцию, но это не то, что вы должны принимать во внимание вне отладки. Тот факт, что операция была инициирована explorer.exe, не означает, что пользователь перетаскивает файл из одного места в другое в Проводнике.

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

1 голос
/ 07 февраля 2020

Если вы хотите обнаружить любое удаление файла и , если вы хотите узнать, было ли это пользователем или нет, то в настоящее время это невозможно в любой. Net реализации относительно этого ответа .

FileSystemWatcher не получает никаких подсказок о происхождении этого удаления.

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