Как скопировать файл перед удалением - PullRequest
0 голосов
/ 08 ноября 2019

Я хотел бы сделать резервную копию, когда файл удален - или фактически перед удалением.

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

Вот код, который я пробовал:

var watcher = new FileSystemWatcher(@"C:\folderToWatch");

//watcher.Changed += WatchEvent;
//watcher.Created += WatchEvent;
//watcher.Renamed += WatchEvent;
watcher.Deleted += WatchEvent;

watcher.EnableRaisingEvents = true;

С помощью метода WatchEvent следующим образом:

private static void WatchEvent(object sender, FileSystemEventArgs e)
{
    File.Copy(e.FullPath, Path.Combine(@"C:\folderToWatchBackup", e.Name));

    Console.WriteLine($"{e.FullPath} was {e.ChangeType}");
}

Конечно, он выдает исключение при попытке скопировать файл, который былуже удален.

Я также пытался прослушивать события Changed и Renamed, но они также не выполняют эту работу.

Идеальный сценарий - это событие, подобное этому:

watcher.BeforeDelete += WatchEvent;

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

Пока я нашел все, что нашел, было написать что-то на C или C ++так что, возможно, это действительно невыполнимая задача для C #?

(это мой первый вопрос, поэтому я надеюсь, что он имеет смысл).

Ответы [ 2 ]

0 голосов
/ 08 ноября 2019

Событие Deleted означает, что событие возникает после удаления.

Поскольку события Deleting нет, вы не можете делать то, что хотите, как я знаю.

Возможно, с некоторым ядром WinAPI ...

0 голосов
/ 08 ноября 2019

Насколько я знаю, это невозможно, так как большинство событий сработает ПОСЛЕ того, как ваш файл уже удален. Я думаю, что вам лучше всего провести соревнование OnChanged. Хотя это не идеальное решение, оно позволяет вам иметь самые последние метаданные файла с момента его последнего изменения.

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