Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/30: Рейтинг темы: голосов - 30, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31

Удаление файлов в каталоге после завершения определенного процесса

10.08.2014, 13:28. Показов 6558. Ответов 57
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
 
#include "WaitThread.h"
#include "Unit1.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------
__fastcall TWaitThread::TWaitThread(bool CreateSuspended)
        : TThread(CreateSuspended)
{
}
//---------------------------------------------------------------------------
void __fastcall TWaitThread::Execute()
{
 FreeOnTerminate = true;
 NameThreadForDebugging(UnicodeString(L"Test"));
 
 Synchronize(ButtonDisable);
 
 STARTUPINFO cif;
 ZeroMemory(&cif,sizeof(STARTUPINFO));
 PROCESS_INFORMATION pi;
 
 if (CreateProcess(TEXT("cmd.exe"),NULL,
    NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==true)
  {
   WaitForSingleObject(pi.hProcess, INFINITE);
   CloseHandle(pi.hProcess);
   CloseHandle(pi.hThread);
  }
  Synchronize(ButtonEnable);
  DeleteDir(L"c:\\test\\");
}
//---------------------------------------------------------------------------
void __fastcall TWaitThread::ButtonDisable()
{
 Form1->Button1->Enabled = false;
}
//---------------------------------------------------------------------------
void __fastcall TWaitThread::ButtonEnable()
{
 Form1->Button1->Enabled = true;
}
//---------------------------------------------------------------------------
bool __fastcall TWaitThread::DeleteDir(UnicodeString DirName)
{
TSearchRec sr;
if (DirName.Length())
 {
 if (!FindFirst(DirName+L"\\*.*",faAnyFile,sr))
 do
  {
  if (!(sr.Name==L"." || sr.Name==L".."))// это удалять не надо
   if (((sr.Attr & faDirectory) == faDirectory ) ||
   (sr.Attr == faDirectory))// найдена папка
    {
    FileSetAttr(DirName+L"\\"+sr.Name, faDirectory );// сброс всяких read-only
    DeleteDir(DirName+L"\\"+sr.Name);//рекурсивно удаляем содержимое
    RemoveDir(DirName + L"\\"+sr.Name);// удаляем теперь уже пустую папку
    }
    else// иначе найден файл
    {
    FileSetAttr(DirName+L"\\"+sr.Name, 0);// сброс всяких read-only
    DeleteFile(DirName+L"\\"+sr.Name);// удаляем файл
    }
  }
 while (!FindNext(sr));// ищем опять, пока не найдем все
 FindClose(sr);
 }
RemoveDir(DirName);
return true;
}
//----------------------------------------------------------------------------
void __fastcall StartWaitThread()
{
 TWaitThread *wait = new TWaitThread(false);
}
//----------------------------------------------------------------------------
Добавлено через 1 минуту
съедает корневую папку

Добавлено через 20 секунд
А нужно чтобы корневая папка осталась

Добавлено через 3 минуты
http://www.cyberguru.ru/cpp-bu... age29.html

Добавлено через 49 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//---------------------------------------------------------------------------
 
#ifndef WaitThreadH
#define WaitThreadH
//---------------------------------------------------------------------------
class TWaitThread: public TThread
{
private:
public:
  __fastcall TWaitThread(bool CreateSuspended);
  //__fastcall ~TestThread();
  void __fastcall Execute();
  void __fastcall ButtonEnable(); //Synchronize
  void __fastcall ButtonDisable(); //Synchronize
  bool __fastcall DeleteDir(UnicodeString DirName); //Synchronize
};
void __fastcall StartWaitThread();
//---------------------------------------------------------------------------
#endif
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2014, 13:28
Ответы с готовыми решениями:

Запуск программы после завершения определенного процесса
Товарищи, приветствую вас всех! Прошу помощи срочно. Укажите что не так пожалуйста. Вот батник: set process=calc.exe goto checker ...

Удаление папок и файлов из указанной папки после завершения программы
Здравствуйте. Мне нужен скрипт vbs для удаления файлов и папок из указанной папки после завершения просмотра файла презентации...

Поиск и удаление определённого файла в определённом каталоге
Как в каталоге LOCAL (там же много папок) найти и удалить файл readmy.doc в cmd?

57
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
11.08.2014, 21:07
Студворк — интернет-сервис помощи студентам
У программы могут быть ключи запуска. В продемонстрированном D1973 примере это переменная SEI.lpParameters.
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
11.08.2014, 21:08
Вот chrome.exe - это значение, которое ты записываешь в переменную START
--disable-hang-monitor - это ты записываешь в переменную PLUS
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 21:24  [ТС]
Запуск exe с возможностью с ключами (процесса)
Когда завершиться процесс:
C:\$FOLDER$ - Удаляем папку по завершению процесса полностью
С:\$FOLDER$ - Создаем папку (Очистка произведена)

Папка не должна удаляться или создаваться пока не завершился процесс
Если будет использоваться пингование не должно быть командной строки или batch-файла!
Исходник брал:Узнать запущен ли процесс и выполнить действие
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
11.08.2014, 21:30
Ответ - пост № 26.
Запускай Хром с ключами или без - не будет никаких консолек.
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 21:36  [ТС]
Батник не консоль разве?

Добавлено через 15 секунд
По твоему
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
11.08.2014, 21:42
Батник выполняется в консоли cmd.exe, с этим я ни разу не спорил. В чем вопрос-то?
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 21:53  [ТС]
Мне не надо чтобы было при запуске:batch файл с консолью
Как сделать ?

Добавлено через 1 минуту
А там консоль будет

Добавлено через 11 секунд
При запуске
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
11.08.2014, 22:01
Цитата Сообщение от Adahaxta Посмотреть сообщение
Мне не надо чтобы было при запуске:batch файл с консолью
Как сделать ?
Блин, да не запускать bat-файл, а запускать файлы с расширением ехе. И не будет у тебя никакой консоли.

Не по теме:

А вообще тут уже столько нагорожено, что, как говорили товарищи древние римляне - Sapienti sat.

0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 22:13  [ТС]
Как можно вообще сделать это без bat-файла ?

Добавлено через 1 минуту
Батник вообще даром не нужен в папке с exe
В свое время от bat избавлялся

Добавлено через 55 секунд
Мне не надо bath файл в папке вообще

Добавлено через 28 секунд
Вот в чем проблема

Добавлено через 2 минуты
Чудеса :Здесь ждем, пока окно ДОС не закроют
Я не писал в комментариях такого
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
11.08.2014, 22:14
Adahaxta, ВНИМАТЕЛЬНО!!! прочитай пост 33
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 22:18  [ТС]
Сами сказали только что не будет окна консольного
А в комментариях другое написано

Добавлено через 1 минуту
Я все подробно писал
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
11.08.2014, 22:21

Не по теме:

Что-то я себя уже полным идиотом ощущаю...


На тебе такой пример, здесь не будет никакой консоли, зуб даю
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
#include <vcl.h>
#pragma hdrstop
#include <System.IOUtils.hpp>
#include "Unit6.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
 
String START = "calc.exe";
String PLUS = "";
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
  SHELLEXECUTEINFO SEI = {0};
  SEI.cbSize = sizeof(SHELLEXECUTEINFO);
  SEI.fMask = SEE_MASK_NOCLOSEPROCESS;
  SEI.hwnd = NULL;
  SEI.lpVerb = L"open";
  SEI.lpFile = START.c_str();
  SEI.lpParameters = PLUS.c_str();
  SEI.lpDirectory = NULL;
  SEI.nShow = SW_SHOW;
  SEI.hInstApp = NULL;
  ShellExecuteEx(&SEI);
  WaitForSingleObject(SEI.hProcess, INFINITE);
  if(TDirectory::Exists(L"C:\\TMP\\111\\222"))
   {
     TDirectory::Delete(L"C:\\TMP\\111\\222", true);
     TDirectory::CreateDirectory(L"C:\\TMP\\111\\222");
   }
}
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
12.08.2014, 07:29  [ТС]
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <vcl.h>
#pragma hdrstop
#include <Tlhelp32.h>
#include "Unit1.h"
 
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
TForm1 *Form1;
 
char* pName;
AnsiString FullPath;
AnsiString Plus;
int REO;
String Capt;
 
__fastcall TForm1::TForm1(TComponent* Owner)
   :TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
   REO = ((TMenuItem *)Sender)->Tag;
   Capt = ((TMenuItem *)Sender)->Caption;
   BitBtn1->Enabled = true;
   switch(REO)
    {
      case 0 : FullPath = "name.exe"; Plus = "параметры запуска";break;
      case 1 : FullPath = "name.exe"; Plus = "параметры запуска";break;
      case 2 : FullPath = "name.exe"; Plus = "параметры запуска";break;
    }
   Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  ShellExecute(NULL,"open",FullPath.c_str(),Plus.c_str(),NULL,SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
bool IsProcessRun(char* pName)
{
  HANDLE Hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if(Hndl == INVALID_HANDLE_VALUE) return false;
  PROCESSENTRY32 ProcessEntry;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(Hndl, &ProcessEntry);
  while (Loop)
   {
     if (strcmp(ProcessEntry.szExeFile, pName) == 0)
       {
         CloseHandle(Hndl);
         return true;
       }
     Loop = Process32Next(Hndl, &ProcessEntry);
   }
  return false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  pName = AnsiString(ExtractFileName(FullPath)).c_str();
  if(! IsProcessRun(pName))
   {
 
     BitBtn1->Caption = Capt + " [Off]";
     BitBtn1->Enabled = true;
   }
  else
   {
 
     BitBtn1->Caption = Capt + " [On]";
     BitBtn1->Enabled = false;
   }
  Application->ProcessMessages();
}
//---------------------------------------------------------------------------
Папка создается и удаляется до завершения процесса
Полностью код скопировал:Узнать запущен ли процесс и выполнить действие
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
12.08.2014, 07:37
Adahaxta, ты вообще понимаешь или нет, что этот код, в который ты вцепился (пост#57), и то, что ты просишь сделать - совершенно разные вещи. Если нет - займись чем-нибудь другим кроме программирования, не травмируй мозги ни себе, ни окружающим.
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
12.08.2014, 08:02  [ТС]
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include <vcl.h>
#pragma hdrstop
#include <Tlhelp32.h>
#include "Unit1.h"
#include <System.IOUtils.hpp>
 
#pragma package(smart_init)
#pragma resource "*.dfm"
 
 
TForm1 *Form1;
 
char* pName;
AnsiString FullPath;
AnsiString Plus;
int REO;
String Capt;
 
__fastcall TForm1::TForm1(TComponent* Owner)
   :TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N1Click(TObject *Sender)
{
   REO = ((TMenuItem *)Sender)->Tag;
   Capt = ((TMenuItem *)Sender)->Caption;
   BitBtn1->Enabled = true;
   switch(REO)
    {
      case 0 : FullPath = "name.exe"; Plus = "параметры запуска";break;
      case 1 : FullPath = "name.exe"; Plus = "параметры запуска";break;
      case 2 : FullPath = "name.exe"; Plus = "параметры запуска";break;
    }
   Timer1->Enabled = true;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
  ShellExecute(NULL,"open",FullPath.c_str(),Plus.c_str(),NULL,SW_SHOWNORMAL);
}
//---------------------------------------------------------------------------
bool IsProcessRun(char* pName)
{
  HANDLE Hndl = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if(Hndl == INVALID_HANDLE_VALUE) return false;
  PROCESSENTRY32 ProcessEntry;
  ProcessEntry.dwSize = sizeof(ProcessEntry);
  bool Loop = Process32First(Hndl, &ProcessEntry);
  while (Loop)
   {
     if (strcmp(ProcessEntry.szExeFile, pName) == 0)
       {
         CloseHandle(Hndl);
         return true;
       }
     Loop = Process32Next(Hndl, &ProcessEntry);
   }
  return false;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
  pName = AnsiString(ExtractFileName(FullPath)).c_str();
  if(! IsProcessRun(pName))
   {
 
     BitBtn1->Caption = Capt + " [Off]";
     BitBtn1->Enabled = true;
   }
  else
   {
 
     BitBtn1->Caption = Capt + " [On]";
     BitBtn1->Enabled = false;
   }
   {
if(TDirectory::Exists(L"C:\\$FOLDER$")) TDirectory::Delete(L"C:\\$FOLDER$", true);
TDirectory::CreateDirectory(L"C:\\$FOLDER$");
   }
  Application->ProcessMessages();
}
//---------------------------------------------------------------------------
Добавлено через 41 секунду
Ваш код,потому что и спрашиваю я его не писал
Писали вы !

Добавлено через 1 минуту
Здесь все хорошо сделано,кроме одного
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
12.08.2014, 08:04  [ТС]
Что я спрашиваю

Добавлено через 1 минуту
Никого не обвиняю,вы же писали данный код

Добавлено через 17 секунд
Вот прошу помощи разобраться
0
Модератор
 Аватар для D1973
9929 / 6467 / 2457
Регистрация: 21.01.2014
Сообщений: 27,423
Записей в блоге: 3
12.08.2014, 08:34
Твоя задача была такой: "Удаление файлов в каталоге после завершения определенного процесса". Ответ на него - в сообщении #52. Тот код, который я когда-то писал, и на который ты упорно ссылаешься - совершенно другая задача, имеющая с твоей очень мало общего. Как еще это объяснять? Может так понятней будет?

"Your task was: "Remove files in the directory after the completion of a particular process." The answer to it - in the Post # 52. The code that I once wrote, and which you persistently refers to - a completely different problem, having your very little in common."

Тему считаю полностью исчерпанной.
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
12.08.2014, 08:44  [ТС]
Покажите как сделать с этим кодом который дал
Мне больше ничего не надо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2014, 08:44
Помогаю со студенческими работами здесь

Перезапуск процесса после его завершения
Доброго суток. Бат вообще не знаю. создаваться будет бат программно(Delphi). Нужно реализовать такой алгоритм - пока работает процесс...

Выполнение скрипта после завершения процесса
Ребят нужна помощь, есть вот такой код start &quot;запуск SAMP&quot; /wait &quot;G:\GTASA\samp.exe&quot; TASKLIST | FIND &quot;samp.exe&quot; || ( REN...

Скрипты Linux, удаление файлов из каталога, подсчет файлов в каталоге
С linux столкнулась не по своей воле, но приходиться изучать, я совсершенно еще зеленая в Линуксе, если есть проффесионалы, могли бы...

После завершения процесса он остается в режиме ожидания
Доброго времени суток! Написал небольшую консольную програмку на C++, работает под убунтой, задача ее простая - читать данные из com...

Выполнение команды после завершения процесса (программы)
Необходимо наладить резервное копирование базы данных после завершения приложения, но что то не работает... CHCP 1251 START...


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

Или воспользуйтесь поиском по форуму:
58
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru