gpt4 book ai didi

c# - 在 Linux 上使用 Samba 的 FileSystemWatcher

转载 作者:IT王子 更新时间:2023-10-29 01:22:59 25 4
gpt4 key购买 nike

我在我的 C# 应用程序(在 Windows 上运行)上使用 FileSystemWatcher,以便在我的应用程序中更新我当前正在浏览的文件。当我浏览本地目录时它运行良好。当文件被重命名、删除或添加时,我会收到通知。但是例如,当我第一次重命名网络驱动器上的文件时,FileSystemWatcher 会通知我重命名操作,然后,当我重命名同一个文件或另一个文件时,FileSystemWatcher 通知我一个错误:

指定的服务器无法执行请求的操作

然后 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");
}

最佳答案

首先,远程共享的文件系统监控总是有些不可靠。您不应该依赖您的应用程序获取所有事件——事实上,我建议您提供一个备份轮询机制来检查您可能错过的更改。 GUI 中的刷新按钮可能是另一种选择,具体取决于您的应用。

也就是说,您的特定问题似乎并不少见。我用谷歌搜索了一下,发现了这些东西:

我的猜测是,这是与 Windows 结合使用的某些版本(或配置)的 Samba 的问题。 Linux 服务器上的 Samba 日志中是否有任何内容可以指出问题的原因?

作为即时解决方法,我建议您尝试以下操作:

  • 添加轮询机制,确保即使 FSW 发生故障,您也能获得文件夹更改
  • 当 FSW 损坏时,尝试通过创建一个新的来“重新启动”它。您可能还想在收到错误时检查 EnableRaisingEvents 是否设置为 false - 也许您可以将其设置为 true 以再次开始接收事件。
  • (在这里捕获救命稻草)尝试使用 internal buffer size万一这就是问题所在(我对此表示怀疑,但值得一试)

关于c# - 在 Linux 上使用 Samba 的 FileSystemWatcher,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11306302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com