Существует ли общее событие Windows, которое возникает при сохранении файла (кроме класса FileSystemWatcher) - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу создать программу, которая проверяет, сохранил ли пользователь файл через диалоговое окно сохранения Windows, есть ли общее событие Windows, на которое я могу подписаться?

1 Ответ

0 голосов
/ 23 апреля 2019

Хорошо, основываясь на рекомендации комментариев, я использовал класс FileSystemWatcher и наблюдал за всеми моими дисками.

И он работает без каких-либо проблем, связанных с проблемами производительности или ресурсов.

ВотЛитт тест-программа, которую я написал:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;

namespace FileSystemWatcherTest {
    class Program {
        static List<FileSystemWatcher> fsWatchers = new List<FileSystemWatcher>();

        static void Main(string[] args) {
            foreach(DriveInfo dInfo in DriveInfo.GetDrives()) {
                InitializeWatcher(dInfo.Name);
                Console.WriteLine("Initialized watcher for disc '" + dInfo.Name + "'");
            }

            Console.WriteLine("\nPress 'q' to exit");
            while (Console.Read() != 'q') ;

            DisposeWatchers();
        }

        static void DisposeWatchers() {
            foreach(FileSystemWatcher fsWatcher in fsWatchers) {
                fsWatcher.Dispose();
            }
        }

        static void InitializeWatcher(string DiscPath) {
            try {
                FileSystemWatcher fsWatcherToAdd = new FileSystemWatcher(DiscPath);

                fsWatcherToAdd.NotifyFilter = NotifyFilters.LastAccess
                                     | NotifyFilters.LastWrite
                                     | NotifyFilters.FileName
                                     | NotifyFilters.DirectoryName;

                fsWatcherToAdd.Created += FsWatcher_Created;

                fsWatcherToAdd.IncludeSubdirectories = true;
                fsWatcherToAdd.EnableRaisingEvents = true;

                fsWatchers.Add(fsWatcherToAdd);
            } catch {
            }           
        }

        private static void FsWatcher_Created(object sender, FileSystemEventArgs e) {
            Console.WriteLine(DateTime.Now.ToLongTimeString() + ": " + e.Name + " created...");
        }
    }
}
...