Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# FileSystemWatcher不会通知Samba共享上的事件_C#_Filesystemwatcher_Samba - Fatal编程技术网

C# FileSystemWatcher不会通知Samba共享上的事件

C# FileSystemWatcher不会通知Samba共享上的事件,c#,filesystemwatcher,samba,C#,Filesystemwatcher,Samba,我在C#应用程序中使用FileSystemWatcher,该应用程序在我的服务器上作为Windows服务运行。观察者路径是来自另一个网络的Samba共享。 当watcher的文件夹路径是服务器上的一个文件夹时,应用程序可以完全正常工作,但对于共享文件夹,不会引发任何事件-在文件夹中创建文件时需要通知我,然后我将其移动到另一个文件夹,重命名它,读取它,等等。(我还尝试了watcher。更改了事件,但也没有发生任何事情) 我在这里发现了一个类似的问题: 有人知道FSW是否仍然存在Samba共享文件

我在C#应用程序中使用FileSystemWatcher,该应用程序在我的服务器上作为Windows服务运行。观察者路径是来自另一个网络的Samba共享。 当watcher的文件夹路径是服务器上的一个文件夹时,应用程序可以完全正常工作,但对于共享文件夹,不会引发任何事件-在文件夹中创建文件时需要通知我,然后我将其移动到另一个文件夹,重命名它,读取它,等等。(我还尝试了watcher。更改了事件,但也没有发生任何事情)

我在这里发现了一个类似的问题:

有人知道FSW是否仍然存在Samba共享文件夹的问题吗? 我已经尝试使用StreamReader和StreamWriter来测试我是否有权访问共享文件夹-这没有任何问题。我还考虑过如果FSW“中断”(如上面的问题中所提到的),则将EnableRaisingEvents重置为true,但我有点困惑如何确定它是否中断-因为我没有收到错误,它根本不起作用

这是我的watcher类的一部分,它作为后台服务运行:

受保护的覆盖任务ExecuteAsync(CancellationToken stoppingToken)
{
初始化();
可测试性();
RunFileWatcher();
返回Task.CompletedTask;
}
私有无效可测试性()
{
//获取共享驱动器上当前的目录。
DirectoryInfo[]sDirs=新的DirectoryInfo(@“\\10.18.249.8\halit4ind$”).GetDirectories();
//将每个目录名写入一个文件。
使用(StreamWriter sw=new StreamWriter(导入路径+“\\SDriveDirs.txt”))
{
foreach(sDirs中的DirectoryInfo目录)
{
sw.WriteLine(目录名称);
}
}
//读取并显示文件中的每一行。
字符串行=”;
使用(StreamReader sr=new StreamReader(导入路径+“\\SDriveDirs.txt”))
{
而((line=sr.ReadLine())!=null)
{
控制台写入线(行);
}
}
}
私有void RunFileWatcher()
{
logger.LogInformation($“RunFileWatcher监视路径{importPath}”);
watcher=新文件系统watcher
{
路径=@importPath,
过滤器=“*.csv”
};
watcher.Created+=OnCreated;
watcher.Changed+=OnCreated;
watcher.EnableRaisingEvents=true;
}
已创建私有void(对象源、文件系统目标)
{
logger.LogInformation($“文件{e.FullPath}已创建/更改-类型:{e.ChangeType}”);
if(e.ChangeType==WatcherChangeTypes.Created)
{
var newFilename=TryMoveFileToWork(e.Name);
将文件移动到ARCHIV(新文件名);
}
}
这是我在控制台中获得的输出(我尝试在\10.18.249.8\halit4ind$\Outbox中创建一个文件,但没有任何结果):

这是使用其他路径时得到的输出:

pers
Inbox
Outbox
Work
Archiv
[08:49:35 INF] RunFileWatcher watching path D:\temp\Outbox
[08:49:35 DBG] Failed to locate the development https certificate at 'null'.
[08:49:35 DBG] Hosting started
[08:49:35 DBG] Loaded hosting startup assembly InfoniqaServiceHali
Hosting environment: Production
Content root path: D:\Services\InfoniqaServiceHali
Now listening on: http://0.0.0.0:7040
Application started. Press Ctrl+C to shut down.
[08:49:44 INF] File D:\temp\Outbox\Personal.csv created/changed - Type: Created
[08:49:44 INF] TryMoveFileToWork Personal.csv

应用程序是在用户帐户下运行,还是在系统或服务帐户下运行?您是否检查过该帐户是否有权访问该共享?目前您的问题与之前提出的问题相同。如果您想缩小范围,例如,通过提供一份证明您对其中一个建议解决方案的理解以及未能使其发挥作用的报告,则情况会有所不同。就FSW“中断”检测而言,这将取决于具体场景;在您的情况下,可能轮询是唯一的方法,因为根据您的说法,FSW从一开始就不起作用。@PeterB是的,据我所知,我确实可以访问该文件夹,因为使用StreamReader和Writer进行读写是有效的。@PeterDuniho我想我会尝试使用计时器进行轮询,因为我尝试过的似乎都不起作用-谢谢!
pers
Inbox
Outbox
Work
Archiv
[08:49:35 INF] RunFileWatcher watching path D:\temp\Outbox
[08:49:35 DBG] Failed to locate the development https certificate at 'null'.
[08:49:35 DBG] Hosting started
[08:49:35 DBG] Loaded hosting startup assembly InfoniqaServiceHali
Hosting environment: Production
Content root path: D:\Services\InfoniqaServiceHali
Now listening on: http://0.0.0.0:7040
Application started. Press Ctrl+C to shut down.
[08:49:44 INF] File D:\temp\Outbox\Personal.csv created/changed - Type: Created
[08:49:44 INF] TryMoveFileToWork Personal.csv