首页 > 解决方案 > 当目录(FileWatcher)发生变化时如何输出警报消息?

问题描述

我制作了一个 FileWatcher 来控制特定(路径)目录中是否发生了某些事情。现在,如果发生某些事情,我想在 JavaScript 文件中输出带有创建或重命名的文件名的警报消息。但我不知道如何解决这个问题。

我如何必须使用 HomeController 中的方法来获取 JavaScript 中的文件名?还是我必须做一个新的方法?

//FileWatcher.cs
public class FileWatcherService
    {
        public event EventHandler<string> FileCreated;
        public event EventHandler<string> FileDeleted;
        public event EventHandler<RenamedEventArgs> FileRenamed;

        public FileWatcherService()
        {
            FileSystemWatcher fileWatcher = new FileSystemWatcher();

            string path = @"C:\Users\Kopuz\Desktop\Log-Dateien\";
            fileWatcher.Path = path;

            fileWatcher.NotifyFilter = NotifyFilters.LastAccess
                | NotifyFilters.LastWrite
                | NotifyFilters.FileName
                | NotifyFilters.DirectoryName
                | NotifyFilters.CreationTime;

            fileWatcher.Deleted += OnDeleted;
            fileWatcher.Created += OnCreated;
            fileWatcher.Renamed += OnRenamed;

            fileWatcher.EnableRaisingEvents = true;
        }

        private void OnCreated(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine($"File: {e.Name} created on {e.FullPath}");
            FileCreated.Invoke(this, e.FullPath);
        }

        private void OnDeleted(object sender, FileSystemEventArgs e)
        {
            Console.WriteLine($"File: {e.Name} deleted from {e.FullPath}");
            FileDeleted?.Invoke(this, e.FullPath);
        }

        private void OnRenamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine($"File: {e.OldName} renamed to {e.Name}");
            FileRenamed?.Invoke(this, e);
        }
    }
//HomeController.cs
public HomeController(PerformanceAnalyseToolContext db, FileWatcherService fws)
        {
            this.db = db;
            fws.FileRenamed += FileWatcherService_FileRenamed;
            fws.FileCreated += FileWatcherService_FileCreated;
            fws.FileDeleted += FileWatcherService_FileDeleted;
        }

        private void FileWatcherService_FileDeleted(object sender, string fullPath)
        {
            Console.WriteLine($"HomeController::File deleted: {fullPath}");
        }

        private void FileWatcherService_FileCreated(object sender, string fullPath)
        {
            Console.WriteLine($"HomeController::File created: {fullPath}");

            string fileName = new FileInfo(fullPath).Name;
            Console.WriteLine(fileName);
        }

        private void FileWatcherService_FileRenamed(object sender, RenamedEventArgs e)
        {
            Console.WriteLine($"HomeController::File renamed: {e.OldFullPath} --> {e.FullPath}");

            string fileName = new FileInfo(e.FullPath).Name;
            Console.WriteLine(fileName);
        }

标签: javascriptc#file-watcher

解决方案


您必须进行任何一项民意调查,这通常是不受欢迎的。

或用于始终连接推送的此类双向通信的 websocket 类型交易。 https://blog.stanko.io/do-you-really-need-websockets-343aed40aa9b

实时推送更新是 websocket 的用途。


推荐阅读