C # File System Watchers отслеживает только скопированные файлы - PullRequest
2 голосов
/ 04 ноября 2019

В настоящее время я пытаюсь сохранить счетчик на c # в локальной файловой папке для новых создаваемых файлов.

У меня есть два подкаталога на CD и LP, которые я должен постоянно проверять.

File System Watcher отслеживает только мои скопированные папки. По сути, мне нужно отслеживать папки, созданные начиная с EM *, но мой код показывает увеличение счетчика, когда я копирую и вставляю папки, а не когда я создаю папки EM *. например, EM1 Только 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;
        }

1 Ответ

2 голосов
/ 04 ноября 2019

Ваш код правильный, попробуйте создать каталог с консолью и MKDIR, он будет работать. Если вы создаете каталог из Проводника, сначала он создается как «Новая папка», а затем переименовывается.

Из веб-сайта Microsoft: копирование и вставка интерпретируется как переименование https://docs.microsoft.com/en-us/dotnet/api/system.io.filesystemwatcher.notifyfilter?view=netframework-4.8

ОперационнаяСистема и объект FileSystemWatcher интерпретируют действие вырезания и вставки или действие перемещения как действие переименования для папки и ее содержимого

Из одного и того же документа события могут возникать несколько раз:

Обычные операции файловой системы могут вызывать более одного события. Например, когда файл перемещается из одного каталога в другой, могут возникнуть несколько событий OnChanged и некоторые события OnCreated и OnDeleted.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...