【问题标题】:C# File System Watchers is only keeping count of Copied filesC# File System Watchers 只记录复制文件的数量
【发布时间】:2019-11-04 07:14:11
【问题描述】:

我目前正在尝试在本地文件夹中为创建的新文件保留一个 c# 计数器。

我有两个 CD 和 LP 的子目录,我必须不断检查。

File System Watcher 仅跟踪我复制的文件夹。 基本上我需要跟踪以 EM* 开头创建的文件夹,但是当我复制和粘贴文件夹而不是创建 EM* 文件夹时,我的代码显示计数器增加。 例如 EM1 EM2 仅 EM2 副本会增加计数器,即使这样有时也会增加 +2

        static int LPcounter { get; set; }
        static int CDcounter { get; set; }
        static int LPCreated;
        static int CDCreated;
        FileSystemWatcher CDdirWatcher = new FileSystemWatcher();
        FileSystemWatcher LPdirWatcher = new FileSystemWatcher();

        public Form1()
        {
            InitializeComponent();

            while (true) 
                watch();
        }

        public void watch()
        { 

            CDdirWatcher.Path = @"C:\Data\LotData\CD";
            CDdirWatcher.Filter = "EM*";
            CDdirWatcher.NotifyFilter = NotifyFilters.DirectoryName | NotifyFilters.LastWrite;
            CDdirWatcher.EnableRaisingEvents = true;
            CDdirWatcher.Created += CDdirWatcher_Created; 


            LPdirWatcher.Path = @"C:\Data\LotData\LP";
            LPdirWatcher.Filter = "EM*";
            LPdirWatcher.NotifyFilter = NotifyFilters.DirectoryName;
            LPdirWatcher.EnableRaisingEvents = true;
            LPdirWatcher.Created += LPdirWatcher_Created;

        } 
        private static void CDdirWatcher_Created(object sender, FileSystemEventArgs e)
        {
            CDCreated += 1;
        }
        private static void LPdirWatcher_Created(object sender, FileSystemEventArgs e)
        {
            LPCreated += 1;
        }

【问题讨论】:

  • 您的要求不够明确
  • 很抱歉,如果我的要求不清楚,哪一部分令人困惑?抱歉,我仍然是在堆栈上发帖的新手。顺便说一句,我已经编辑了我的帖子以更清晰
  • 我的理解是,您想为所有以EM 开头的名称添加一个监视,并且监视程序也为EM2-copy 完成了它的工作,因为它也以@987654324 开头@那么这里有什么问题?
  • 由于某种原因 CDCreated 没有记录任何创建的东西,例如 EM1 , EM2 但是当我在调试时复制和粘贴旧文件时计数器上升
  • 愚蠢的问题,但你为什么要在无限循环中调用 watch() ?你应该只需要调用一次来设置观察者,然后你会收到来自这些的事件,我想知道这是问题的一部分吗?自从我进行任何表单开发以来已经有一段时间了,但这看起来不对......

标签: c# linq filesystemwatcher


【解决方案1】:

您的代码是正确的,尝试使用控制台和 MKDIR 创建目录,它会工作。如果您从资源管理器创建一个目录,它首先创建为“新文件夹”,然后重命名。

来自 Microsoft 网站:复制和粘贴被解释为重命名 https://docs.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher.notifyfilter?view=netframework-4.8

操作系统和 FileSystemWatcher 对象解释一个 剪切和粘贴操作或移动操作作为文件夹的重命名操作 及其内容

从同一个文档中,事件可以引发多次:

常见的文件系统操作可能引发多个事件。为了 例如,当一个文件从一个目录移动到另一个目录时,几个 可能会引发 OnChanged 以及一些 OnCreated 和 OnDeleted 事件。

【讨论】:

  • 如何创建正确的过滤器以在创建新文件夹但未修改时正确触发计数事件?
  • 赞成 :) 和 @jonathan james:您可能还会看到此答案 stackoverflow.com/a/1765094/3774666 文件系统事件被触发两次,这可能导致 +2。
猜你喜欢
  • 1970-01-01
  • 2020-04-26
  • 1970-01-01
  • 2023-03-21
  • 2010-12-18
  • 2021-05-24
  • 2011-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多