Как перезаписать файл / папку из сетевой папки, удалить - PullRequest
1 голос
/ 26 декабря 2011

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

У меня есть этот код, который работает, когда файл / папка удаляется, но мне нужно отменить удаление и переместить файл в корзину. Я нашел, как переместить файл / папку в корзину здесь: Как переместить файлы в корзину

FileSystemWatcher fsw = new FileSystemWatcher();

private void frmMain_Load(object sender, EventArgs e)
{
    StartWatcher("X:\\Virtuals\\");
}
private void StopWatcher()
{
    if (fsw != null)
        try
        {
            fsw.EnableRaisingEvents = false;
            fsw.Dispose();
            fsw = null;
        }
        catch { }
}
private void StartWatcher(string path)
{
    StopWatcher();

    FileSystemWatcher fsw = new FileSystemWatcher();
    fsw.Path = Path.GetDirectoryName(path);
    fsw.Filter = Path.GetFileName(path);
    fsw.NotifyFilter = NotifyFilters.LastAccess |
    NotifyFilters.LastWrite | NotifyFilters.FileName
    | NotifyFilters.DirectoryName;
    fsw.Deleted += new FileSystemEventHandler(OnDeleted);
    fsw.EnableRaisingEvents = true;
}
private void OnDeleted(object source, FileSystemEventArgs e)
{ MessageBox.Show("File deleted: " + e.FullPath); }

Ответы [ 2 ]

3 голосов
/ 26 декабря 2011

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

1 голос
/ 26 декабря 2011

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

...