Форум программистов, компьютерный форум CyberForum.ru

Запуск и последующее удаление всех исполняемых файлов из каталога - C++

Восстановить пароль Регистрация
 
Адренс Аксидор
5 / 5 / 1
Регистрация: 16.05.2012
Сообщений: 92
22.02.2014, 15:49     Запуск и последующее удаление всех исполняемых файлов из каталога #1
Здравствуйте. Прошу помочь написать программу, которая бы запускала все исполняемые файлы (.exe, .bat, .cmd) из заданного каталога, а потом удаляла их.
Как запустить исполняемый файл мне понятно, как удалить его вроде бы тоже. Вопрос вот в чем: как сделать это именно из каталога и с файлами с определенным расширением? Я правильно понял, что нужно использовать Get и SetCurrentDirectory? Или есть другая альтернатива UNIX-овым opendir и readdir?
Вот писал прогу, которая запускает файлы из конфигурационного, можете помочь сделать так, чтобы она читала их из каталога, например, H?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#include <Windows.h>
#include <fstream>
#include <iostream>
 
using namespace std;
 
int main()
{
    ifstream conf("H:/config.txt");
    char *AppName = new char[100], *t = new char[10];
    int time;
    STARTUPINFO si = {sizeof(si)};
    PROCESS_INFORMATION pi;
 
    if (!conf.is_open())
    {
        cout << "File not found.\n";
        return 0;
    }
 
    while (!conf.eof())
    {
 
        conf.getline(AppName, 100);
        cout << "Process: " << AppName << " Status: ";
 
        conf.getline(t, sizeof(t));
        time = atoi(t) * 1000;
        if (CreateProcess(AppName, NULL, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS, NULL, NULL, &si, &pi))
        {
 
            CloseHandle(pi.hThread);
 
            if (WaitForSingleObject(pi.hProcess, time) == WAIT_TIMEOUT)
            {
                TerminateProcess(pi.hProcess, 0);
                cout << "Ne uloghilsa;" << endl;
            }
            else
                cout << "Uloghilsa;" << endl;
            CloseHandle(pi.hProcess);
        }
    }
    conf.close();
 
    return 1;
}
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2014, 15:49     Запуск и последующее удаление всех исполняемых файлов из каталога
Посмотрите здесь:

Удаление непустого каталога C++
Операции создания каталога, изменения временного каталога, удаление файла и директории C++
C++ перации создания каталога, изменения временного каталога, удаление файла и директории (рекурсивно)
Вывести список файлов каталога C++
C++ Слияние нескольких исполняемых файлов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.02.2014, 16:04     Запуск и последующее удаление всех исполняемых файлов из каталога #2
Адренс Аксидор, все файлы одновременно или по очереди?
Адренс Аксидор
5 / 5 / 1
Регистрация: 16.05.2012
Сообщений: 92
22.02.2014, 16:07  [ТС]     Запуск и последующее удаление всех исполняемых файлов из каталога #3
В задании не сказано, скорее всего по очереди
programina
 Аватар для programina
1912 / 597 / 37
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.02.2014, 16:11     Запуск и последующее удаление всех исполняемых файлов из каталога #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Если нужно просто найти все файлы с расширением exe и что-нибудь сделать с ними, то как-то так.
C++
/// только для MinGW !
#include <stdio.h>
#include <string.h>
#include <dir.h>
 
 
int main(int argc, char *argv[])
{
    _finddata_t f;
    
    long d = _findfirst("*.exe", &f);
    
    if(d != -1)
    {
        printf("%s %ld\n", f.name, f.size);
 
        // здесь запускаем первую найденую екзешку
 
        for(int r = 0; ; )
        {
            if(r = _findnext(d, &f) != 0) break;
            printf("%s %ld\n", f.name, f.size);
 
            // здесь запускаем остальные екзешки
        }
    }
    else
    {
        printf("No %s files\n", "*.exe");
    }
    _findclose(d);
}
Добавлено через 1 минуту
Для visual с++ названия функций findnext, findclose и findfirst немного отличаются.
Адренс Аксидор
5 / 5 / 1
Регистрация: 16.05.2012
Сообщений: 92
22.02.2014, 18:05  [ТС]     Запуск и последующее удаление всех исполняемых файлов из каталога #5
А как выбрать каталог, в котором будем работать? Просто больше всего проблемы именно в установке рабочего каталога. В UNIX-е я использовал opendir и readdir, а вот как делать это в Windows-е не знаю.

Добавлено через 10 минут
Пытался делать на основе этого примера:
C++
1
2
3
4
5
6
TCHAR buffer[MAX_PATH];
GetCurrentDirectory(sizeof(buffer),buffer);
cout << buffer << endl;
SetCurrentDirectory("C:\\1");
GetCurrentDirectory(sizeof(buffer),buffer);
cout << buffer << endl;
Все, вроде бы исправил

Добавлено через 1 час 19 минут
Еще вот такой вопрос возник: DeleteFile(f.name); удаляет bat и cmd файлы, но не удаляет файлы с расширением exe. В чем может быть причина?

Добавлено через 15 минут
И в этом разобрался. Большое спасибо за помощь
Yandex
Объявления
22.02.2014, 18:05     Запуск и последующее удаление всех исполняемых файлов из каталога
Ответ Создать тему
Опции темы

Текущее время: 16:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru