private static void ReadConfiguration(FileSystemMonitorConfigSection config)
        {
            _directories = new List <string>(config.Directories.Count);
            _rules       = new List <Rule>();

            foreach (DirectoryElement directory in config.Directories)
            {
                _directories.Add(directory.Path);
            }

            foreach (RuleElement rule in config.Rules)
            {
                _rules.Add(new Rule
                {
                    FilePattern       = rule.FilePattern,
                    DestinationFolder = rule.DestinationFolder,
                    IsDateAppended    = rule.IsDateAppended,
                    IsOrderAppended   = rule.IsOrderAppended
                });
            }

            CultureInfo.DefaultThreadCurrentCulture   = config.Culture;
            CultureInfo.DefaultThreadCurrentUICulture = config.Culture;
            CultureInfo.CurrentUICulture = config.Culture;
            CultureInfo.CurrentCulture   = config.Culture;
        }
        static async Task Main(string[] args)
        {
            FileSystemMonitorConfigSection config = ConfigurationManager.GetSection("fileSystemSection") as FileSystemMonitorConfigSection;

            if (config != null)
            {
                ReadConfiguration(config);
            }
            else
            {
                Console.Write(Strings.ConfigNotFounded);
                return;
            }

            Console.WriteLine(config.Culture.DisplayName);

            ILogger logger = new Logger();

            _distributor = new FilesDistributor(_rules, config.Rules.DefaultDirectory, logger);
            ILocationsWatcher <FileModel> watcher = new FilesWatcher(_directories, logger);

            watcher.Created += OnCreated;

            CancellationTokenSource source = new CancellationTokenSource();

            Console.CancelKeyPress += (o, e) =>
            {
                watcher.Created -= OnCreated;
                source.Cancel();
            };

            await Task.Delay(TimeSpan.FromMilliseconds(-1), source.Token);
        }