【问题标题】:How to output an alert message when something changes in the directory (FileWatcher)?当目录(FileWatcher)发生变化时如何输出警报消息?
【发布时间】:2019-07-25 21:50:18
【问题描述】:

我制作了一个 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);
        }

【问题讨论】:

  • 控制器的寿命很短,不能用于消费事件。您可以创建一个后台工作程序来订阅 FileWatcherService 以获取文件事件并跟踪更改,然后控制器可以查看更改。

标签: javascript c# file-watcher


【解决方案1】:

你必须做任何一个投票,这通常是不受欢迎的。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2017-05-05
    相关资源
    最近更新 更多