首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >FileSystemWatcher事件未触发

FileSystemWatcher事件未触发
EN

Stack Overflow用户
提问于 2014-05-23 05:58:03
回答 4查看 10.7K关注 0票数 4

我的FileSystemWatcher没有抛出任何事件。我看过这些类似的问题,似乎没有一个是我的问题的答案:

*编辑:我的目标是在XLS文件被复制到目录或在目录中创建时捕获。

监视器类:

代码语言:javascript
复制
public class Monitor
{
    FileSystemWatcher watcher = new FileSystemWatcher();
    readonly string bookedPath = @"\\SomeServer\SomeFolder\";

    public delegate void FileDroppedEvent(string FullPath);
    public event FileDroppedEvent FileDropped;

    public delegate void ErrorEvent(Exception ex);
    public event ErrorEvent Error;

    public Monitor()
    {
        watcher.Path = bookedPath;
        watcher.Filter = "*.xls";
        watcher.NotifyFilter = NotifyFilters.LastWrite;
        watcher.Changed += new FileSystemEventHandler(watcher_Changed);
        watcher.Error += new ErrorEventHandler(watcher_Error);
    }

    void watcher_Error(object sender, ErrorEventArgs e)
    {
        Error(e.GetException());
    }

    void watcher_Changed(object sender, FileSystemEventArgs e)
    {
        if (e.ChangeType != WatcherChangeTypes.Created) return;
        FileDropped(e.FullPath);
    }

    public void Start()
    {
        watcher.EnableRaisingEvents = true;
    }

    public void Stop()
    {
        watcher.EnableRaisingEvents = false;
    }
}

带有列表框的简单表单:

代码语言:javascript
复制
public partial class Form1 : Form
{
    Monitor monitor = new Monitor();

    public Form1()
    {
        InitializeComponent();
        FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        Load += new EventHandler(Form1_Load);
        monitor.FileDropped += new Monitor.FileDroppedEvent(monitor_FileDropped);
        monitor.Error += new Monitor.ErrorEvent(monitor_Error);
    }

    void Form1_Load(object sender, EventArgs e)
    {
        monitor.Start();
    }

    void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        monitor.Stop();
    }

    void monitor_Error(Exception ex)
    {
        listBox1.Items.Add(ex.Message);
    }

    void monitor_FileDropped(string FullPath)
    {
        listBox1.Items.Add(FullPath);
    }
}

我做错了什么?

EN

回答 4

Stack Overflow用户

发布于 2014-05-23 06:23:01

试试这个。对我来说,这是一个非常类似的任务。

代码语言:javascript
复制
watcher.NotifyFilter = NotifyFilters.FileName;   
watcher.Created += new FileSystemEventHandler(handler);     
watcher.Renamed += new RenamedEventHandler(handler);
票数 2
EN

Stack Overflow用户

发布于 2016-05-14 00:43:13

这可能是因为文件元数据尚未更新。如果您连续写入该文件,则可能会发生这种情况。

票数 0
EN

Stack Overflow用户

发布于 2018-05-28 19:52:19

您是否尝试过以下操作:

代码语言:javascript
复制
watcher.Path = directory name;
watcher.NotifyFilter = NotifyFilters.LastWrite;
watcher.Filter = "*.xls";

watcher.Changed += OnDirectoryChange;
watcher.Error += OnError;
watcher.EnableRaisingEvents = true;

// Watch only files not subdirectories.
watcher.IncludeSubdirectories = false;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23817735

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档