Поиск по этому блогу

четверг, 24 мая 2012 г.

Программа сама себя копирует

После пересмотра Железного человека задался вопросом, а как заставить программу саму себя скопировать куда - либо (в другое место). Задача стояла так - нужно либо ввести в консоль команду,  либо нажать кнопку, чтобы программа выполнила копирование самой себя в другую папку. Вот в принципе 2 варианта решения этой задачи. Один вариант сделан на основы одной из программ, которую я уже выкладывал.
Вот первый (здесь нужно вставить названия папки, чтобы программа знала куда копироваться):

            // Полный путь к программе.
            string currentAssembly = Assembly.GetExecutingAssembly().Location;
            // Название файла программы.
            string fileName = Path.GetFileName(currentAssembly);
            // Папка назначения.
            string destinationDirectory = Path.Combine(Directory.GetCurrentDirectory(), "copy");
            // Проверяем, есть ли директория, если нет - создаём.
            if (!Directory.Exists(destinationDirectory))
                Directory.CreateDirectory(destinationDirectory);
            // Копируем в заданную папку, перезаписывая, при необходимости.
            File.Copy(currentAssembly, Path.Combine(destinationDirectory, fileName), true);
            Console.WriteLine("Скопировано.");
            Console.ReadKey();

Вот второй:


        static void Main(string[] args)
        {
            Console.WriteLine("введите команду");
            string command = Console.ReadLine();
            if(command == "копируй себя")
            {
                CopyFolder(@"D:\Working\project\Новая папка\copiesItselfTo",
                    @"d:\__autoSeo_results\copiesItselfTo");
                Console.WriteLine("Копирование завершено");
            }
            Console.ReadLine();
        }
        static public void CopyFolder(string sourceFolder, string destFolder)
        {
            // Directory.Exists - Определяет, указывает ли заданный путь на существующий каталог на диске
            if (!Directory.Exists(destFolder))
                Directory.CreateDirectory(destFolder);
            string[] files = Directory.GetFiles(sourceFolder);
            //Directory.GetFiles - Возвращает имена файлов (с указанием пути к ним) в указанном каталоге
            foreach (string file in files)
            {
                string name = Path.GetFileName(file);
                string dest = Path.Combine(destFolder, name);
                File.Copy(file, dest);
            }
            string[] folders = Directory.GetDirectories(sourceFolder);
            foreach (string folder in folders)
            {
                string name = Path.GetFileName(folder);
                string dest = Path.Combine(destFolder, name);
                CopyFolder(folder, dest);
            }
        }

Комментариев нет:

Отправить комментарий