FileSystemWatcher没有响应远程更新

时间:2018-03-19 10:49:27

标签: c# filesystemwatcher

我一直在读这篇文章,我开始失去我留下的少数弹珠......

我试图在监视电子表格更新的服务器上运行服务,该电子表格将通过UNC保存到它。 \ server01 \ mon(例如)

现在,服务正常,如果显示器和保存文件的机器是同一台机器,例如,如果我使用服务器将文件复制到文件夹,它就可以工作,如果我在我的电脑上运行服务并监控UNC并将文件复制到我的PC上的UNC,它可以工作..但是如果你从PC更新文件,那就不行了。服务器(或其他方式),我已将服务设置为可以访问所有内容的管理帐户(实际上当前,作为我)

理想情况下,我的服务监控其本地路径,PC将通过UNC写入..但如果我必须监控UNC,那就是那个。但是atm,我似乎无法识别另一个更新的。

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.ServiceProcess;

namespace watchtest
{
    public partial class Service1 : ServiceBase
    {
        private FileSystemWatcher fsw = null;
        private EventLog log;
        private String path = @"c:\temp"; 

        public Service1()
        {
            InitializeComponent();
            ((ISupportInitialize)this.EventLog).BeginInit();
            if (!EventLog.SourceExists(this.ServiceName))
            {
                EventLog.CreateEventSource(this.ServiceName, "Application");
            }
        ((ISupportInitialize)this.EventLog).EndInit();

            this.EventLog.Source = this.ServiceName;
            this.EventLog.Log = "Application";
            log = this.EventLog;
        }

        protected override void OnStart(string[] args)
        {
            this.EventLog.WriteEntry($"Monitoring {path}", EventLogEntryType.Information);
            fsw = new FileSystemWatcher(path);
            fsw.Filter = "*.xlsx";
            fsw.Changed += new FileSystemEventHandler(f_Changed);
            fsw.Created += new FileSystemEventHandler(f_Changed);
            fsw.EnableRaisingEvents = true;
        }

        private void f_Changed(object sender, FileSystemEventArgs e)
        {
            this.EventLog.WriteEntry($"Changed {e.Name}", EventLogEntryType.Information);
        }

        protected override void OnStop()
        {
        }
    }
}

1 个答案:

答案 0 :(得分:0)

好的

原来我不像我想的那样愚蠢,但是

将项目从outlook保存到本地PC时,它只保存到c:\ temp \ filename.xls

当保存到UNC时,它会这样做(即使你只说xlsx监视器,也会出现tmp文件!!)

Created: 1A50796C.tmp
Changed: 1A50796C.tmp
Changed: 1A50796C.tmp
Renamed: 4203327D.tmp
Renamed: filename.xlsx
Deleted: 4203327D.tmp

所以......

简而言之,我必须添加一个检查文件扩展名是.xlsx并监听重命名..以便它可以在所有的senarios中使用。