1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31

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

10.08.2014, 13:28. Показов 6790. Ответов 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
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,492
Записей в блоге: 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
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,492
Записей в блоге: 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
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,492
Записей в блоге: 3
11.08.2014, 22:14
Adahaxta, ВНИМАТЕЛЬНО!!! прочитай пост 33
0
1 / 1 / 0
Регистрация: 10.08.2014
Сообщений: 31
11.08.2014, 22:18  [ТС]
Сами сказали только что не будет окна консольного
А в комментариях другое написано

Добавлено через 1 минуту
Я все подробно писал
0
Модератор
 Аватар для D1973
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,492
Записей в блоге: 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
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,492
Записей в блоге: 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
9954 / 6490 / 2461
Регистрация: 21.01.2014
Сообщений: 27,492
Записей в блоге: 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru