Akh*_*eus 5 c# linux samba filesystemwatcher
我正在使用FileSystemWatcher
我的C#应用程序(在Windows上运行),以便在我的应用程序中更新我当前正在浏览的文件.当我浏览本地目录时,它工作得很好.重命名,删除或添加文件时会通知我.但是,例如,当我第一次在网络驱动器上重命名文件时,FileSystemWatcher
通知我重命名操作,然后,当我重命名相同的文件或其他文件时,FileSystemWatcher
通知我一个错误:
the specified server cannot perform the requested operation
.
然后FileSystemWatcher没有通知我任何事情.
有时我可以在FileSystemWatcher没有通知我之前重命名两次......
这是我的测试代码:
static void Main(string[] args)
{
FileSystemWatcher watcher = new FileSystemWatcher();
watcher.Path = @"N:\prive\defFolder";
watcher.NotifyFilter = NotifyFilters.FileName | NotifyFilters.LastWrite;
watcher.Changed += new FileSystemEventHandler(watcher_Changed);
watcher.Created += new FileSystemEventHandler(watcher_Changed);
watcher.Deleted += new FileSystemEventHandler(watcher_Changed);
watcher.Renamed += new RenamedEventHandler(watcher_Renamed);
watcher.Error += new ErrorEventHandler(watcher_Error);
watcher.EnableRaisingEvents = true;
Console.Read();
watcher.Dispose();
}
static void watcher_Error(object sender, ErrorEventArgs e)
{
Console.WriteLine("error : " + e.GetException().Message);
}
static void watcher_Renamed(object sender, RenamedEventArgs e)
{
Console.WriteLine("rename success");
}
static void watcher_Changed(object sender, FileSystemEventArgs e)
{
Console.WriteLine("change success");
}
Run Code Online (Sandbox Code Playgroud)
首先,远程共享的文件系统监控总是有些不可靠.您不应该依赖于您的应用程序获取所有事件 - 事实上,我建议您提供备份轮询机制来检查您可能错过的更改.GUI中的刷新按钮可能是另一种选择,具体取决于您的应用程序.
也就是说,你的特殊问题似乎并不常见.我google了一下,找到了这些东西:
我的猜测是,这与Samba与Windows结合的某些版本(或配置)存在问题.Linux服务器上的Samba日志中是否有任何可以指向问题原因的内容?
作为一个直接的解决方法,我建议你尝试这些东西:
EnableRaisingEvents
设置为false
- 也许您可以将其设置为true以再次开始接收事件.