//метод перемещает указанный файл в назначенное место 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; } } } }