Пример #1
0
        /// <summary>
        /// Создает экземпляры <see cref="FileSystemWatcher"/> для указаных папок
        /// </summary>
        /// <param name="folderPaths">Список путей к папкам для прослушивания</param>
        /// <param name="handlers">Список обработчиков</param>
        private void CreateWatchers(ListenedFolderPathElementCollection folderPaths, List <FileSystemEventHandler> handlers)
        {
            if (folderPaths != null)
            {
                foreach (ListenedFolderPathElement folderPath in folderPaths)
                {
                    try
                    {
                        FileSystemWatcher watcher = new FileSystemWatcher(folderPath.FolderPath);

                        watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;

                        //определяем обработчики события создания файла
                        if (handlers != null)
                        {
                            foreach (var item in handlers)
                            {
                                watcher.Created += item;
                            }
                        }

                        watcher.EnableRaisingEvents = true;

                        watchers.Add(watcher);
                    }
                    catch (ArgumentException e)
                    {
                        loger.PrintError(e.Message);
                    }
                }
            }
        }
Пример #2
0
        //метод перемещает указанный файл в назначенное место
        private void MoveTo(string sourceFilePath, string newFilePath)
        {
            //максимальное количество попыток обращения к файлу
            const int maxNumberFailure = 50;

            //флаг для определения свободен ли файл от других процессов
            bool fileLocked = true;

            //счетчик неудачных попыток получить доступ к файлу
            int failureСounter = 0;

            //пока файл занят
            while (fileLocked)
            {
                try
                {
                    //если файл уже существует в  назначенной папке, то удаляем его
                    if (File.Exists(newFilePath))
                    {
                        File.Delete(newFilePath);
                    }

                    //если файл который необходимо переместить существует
                    if (File.Exists(sourceFilePath))
                    {
                        File.Move(sourceFilePath, newFilePath);

                        //получаем имя файла и записываем в журнал, что файл был перемещен
                        string fileName = Path.GetFileNameWithoutExtension(sourceFilePath);
                        loger.PrintFileMoved(fileName, newFilePath);
                    }

                    fileLocked = false;
                }
                catch (IOException ex)
                {
                    failureСounter++;

                    if (failureСounter == maxNumberFailure)
                    {
                        loger.PrintError(ex.Message);
                        fileLocked = false;
                    }
                }
            }
        }