C#文件系统监视程序只对复制的文件进行计数

C#文件系统监视程序只对复制的文件进行计数,c#,linq,filesystemwatcher,C#,Linq,Filesystemwatcher,我目前正试图在本地文件夹的c#上为创建的新文件保留一个计数器 我有两个子目录的CD和LP,我必须不断检查 文件系统监视程序只跟踪我复制的文件夹。 基本上,我需要跟踪从EM*开始创建的文件夹,但我的代码显示,当我复制和粘贴文件夹时,计数器会增加,而不是在创建EM*文件夹时。 e、 g EM1 EM2仅EM2 copy增加计数器,有时甚至增加+2 static int LPcounter { get; set; } static int CDcounter { get

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

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

文件系统监视程序只跟踪我复制的文件夹。 基本上,我需要跟踪从EM*开始创建的文件夹,但我的代码显示,当我复制和粘贴文件夹时,计数器会增加,而不是在创建EM*文件夹时。 e、 g EM1 EM2仅EM2 copy增加计数器,有时甚至增加+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;
        }

您的代码是正确的,请尝试使用console和MKDIR创建目录,它将正常工作。如果从资源管理器创建目录,则首先将其创建为“新文件夹”,然后重命名

从Microsoft web:复制和粘贴被解释为重命名

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

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

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


你的要求不清楚。如果我的要求不清楚,我很抱歉,哪一部分比较混乱?对不起,我还是第一次在堆栈上发布。我编辑我的帖子是为了更清楚我所理解的是,您想为所有以
EM
开头的名称添加一个watch,并且watcher在
EM2 copy
方面也做得很好,因为它也以
EM
开头,那么这里有什么问题吗?出于某种原因,CDCreated没有计算任何创建的名称,例如EM1,EM2但当我在调试时复制并粘贴旧文件时,计数器会出问题,但为什么要在Infinite循环中调用watch()?你只需要调用它一次就可以设置观察器,然后你就会收到来自这些观察器的事件,我想知道这是问题的一部分吗?我已经有一段时间没有做任何表单开发了,但这看起来不太对劲…如何创建正确的筛选器,以便在创建新文件夹且未修改时正确触发count事件?向上投票:)和@jonathan james:您还可以看到针对可能导致+2的事件触发两次的文件系统事件的答案。