【发布时间】: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