FileSystemWatcher не запускается. Создано на FileInfo.Create () - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь использовать объект FileSystemWatcher для просмотра каталогов, когда создаются новые файлы, чтобы поддерживать комбинированный список файлов, представленных в реальном времени.

К сожалению, файлы, созданные в коде, не являютсязапуск обработчика событий, присоединенного к событию Created.

Почему это не работает, и что я могу сделать, чтобы заставить его работать, используя объект FileSystemWatcher?(Я видел this и, скорее всего, для этой работы не нужно зависеть от внешней библиотеки).

Я видел работу FileSystemWatcher, когда щелкнул правой кнопкой мыши ->создать новый файл, но мне нужно, чтобы он работал, когда программа вызывает .Create( ) для FileInfo объекта.

В соответствии с требованиями Minimal, Complete и Verifiable Example :

using System;
using System.IO;
using System.Security.Permissions;

namespace MCVEConsole {
    class Program {
        [PermissionSet( SecurityAction.Demand, Name = "FullTrust" )]
        static void Main( string[] args ) {
            DirectoryInfo myDirectory = new DirectoryInfo(
                Environment.GetFolderPath( Environment.SpecialFolder.MyDocuments )
                ).CreateSubdirectory( "MCVEConsole" );
            FileSystemWatcher fSW = 
                new FileSystemWatcher( myDirectory.FullName, "*.txt" ) {
                    NotifyFilter = 
                        NotifyFilters.CreationTime | 
                        NotifyFilters.LastAccess | 
                        NotifyFilters.LastWrite
                };

            fSW.Created += new FileSystemEventHandler( _Changed );
            fSW.Deleted += new FileSystemEventHandler( _Changed );
            fSW.EnableRaisingEvents = true;

            new FileInfo(
                Path.Combine( myDirectory.FullName, "foo.txt" ) ).Create( ).Close( );

            void _Changed( object sender, FileSystemEventArgs e ) =>
                Console.WriteLine( "bar" );

            Console.WriteLine( "Press any key to continue..." );
            Console.ReadKey( );
        }
    }
}

Причина атрибута [PermissionSet] заключается в том, что я заметил его здесь и подумал, что это может быть проблемой (не было).

1 Ответ

0 голосов
/ 22 мая 2018

Попробуйте NotifyFilters.FileName.Это то, что я должен был добавить, чтобы увидеть, как создаются новые файлы.Не то, что я ожидал, но дал нужный мне результат.

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