【问题标题】:Filewatcher and Queue managementFilewatcher 和队列管理
【发布时间】:2020-05-22 21:46:51
【问题描述】:

i filewatching 一个目录以进行删除、添加和更改。 我从加法开始。 处理时间迫使我进行队列管理,否则我将跳过目录中添加的大量文件。 这是代码: 声明:

static ConcurrentQueue<string> q = new ConcurrentQueue<string>();

然后在 Form_load 中:

Task.Factory.StartNew(filesAdded);

Filewatcher 功能:

private void fileSystemWatcher1_Created_1(object sender, FileSystemEventArgs e)
    {
        q.Enqueue(e.FullPath);
    }

然后是文件添加功能:

        void filesAdded ()
    {
        bool run = true;
        AppDomain.CurrentDomain.DomainUnload += (s, e) =>
        {
            run = false;
            q.Enqueue("stop");
        };
        while (run)
        {
            string filename;
            if (q.TryDequeue(out filename) && run)
            {
                Globals.getTags(filename);
                Globals.ecritDs(filename, true);
            }
        }
    }

感谢 Rene here

它工作正常,但我正在努力寻找一种方法来使用相同的机制来修改和删除文件。

 private void fileSystemWatcher1_Deleted(object sender, FileSystemEventArgs e)
    {}
 private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
    {}

我想在 filesAdded 函数中获取触发器信息(显然需要重命名),但我不知道该怎么做,因为 Enqueue 方法只需要一个参数。 任何帮助表示赞赏!

【问题讨论】:

  • 而不是 ConcurrentQueue 使用 ConcurrentQueue 然后定义一个类来保存您处理所需的信息。顺便说一句,FileSystemWatcher 有一个默认情况下相对较小的缓冲区。您可能只能增加大小而不删除事件
  • 啊啊没想到!谢谢:)

标签: c# winforms queue file-watcher


【解决方案1】:

感谢pinkfloydx33,我正在使用一个类:

 private class FileWatched
    {
        public string fp { get; set; }
        public string trigger { get; set; }
    }

然后在文件中添加循环:

 while (run)
        {
            if (q.TryDequeue(out fw) && run)
            {
                switch (fw.trigger)
                    {
                    case "created":
                        Globals.getTags(fw.fp);
                        Globals.ecritDs(fw.fp, true);
                        break;
                    case "modified":
                        break;
                    case "deleted":
                        break;
                    }
            }
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多