Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Адренс Аксидор
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 93
1

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

22.02.2014, 15:49. Просмотров 762. Ответов 4
Метки нет (Все метки)

Здравствуйте. Прошу помочь написать программу, которая бы запускала все исполняемые файлы (.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;
}

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2014, 15:49
Ответы с готовыми решениями:

Написать программу, которая обеспечивает:начальное формирование каталога файлов;вывод каталога файлов;удаление файлов...
Уважаемые хакеры!Прошу вашей помощи!Я в СИ не особо шарю.((( А на днях уже сдавать.Очень...

Запуск и удаление исполняемых файлов из каталога
Здравствуйте. Помогите пожалуйста разобраться в некоторых местах кода. Полное задание: unit.cpp...

Запуск всех исполняемых файлов в каталоге
Всем привет. Подскажите пожалуйста, как выполнить вот такое задание. Запуск всех исполняемых...

Запуск всех исполняемых файлов в указанном в каталоге
Запуск всех исполняемых файлов в указанном в каталоге. Каталог вводится в качестве параметра....

Запуск всех файлов из каталога
Доброго времени суток. Я решил написать программку для запуска всех файлов находящихся в указанном...

4
programina
2054 / 609 / 41
Регистрация: 23.10.2011
Сообщений: 4,468
Записей в блоге: 2
22.02.2014, 16:04 2
Адренс Аксидор, все файлы одновременно или по очереди?
0
Адренс Аксидор
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 93
22.02.2014, 16:07  [ТС] 3
В задании не сказано, скорее всего по очереди
0
programina
2054 / 609 / 41
Регистрация: 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 немного отличаются.
1
Адренс Аксидор
5 / 5 / 0
Регистрация: 16.05.2012
Сообщений: 93
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 минут
И в этом разобрался. Большое спасибо за помощь
1
22.02.2014, 18:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2014, 18:05

Удаление из всех подкаталогов заданного каталога, включая вложенные, всех FGI-файлов размером не более 27 Кб
Задача - в C:\folders\ много поддиректорий, автоматически создаются файлы различные графические, и...

Запуск исполняемых файлов
Всем привет! У меня есть вот такая вот штука application/x-executable. Как я понимаю это...

Запрет на запуск исполняемых файлов
Подскажите статью как через гпо обычным пользователям (не админам) запретить запуск любых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru