С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13

Удаление папок оптом

24.12.2014, 15:30. Показов 2024. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
String Dir1 = "1"; 
  String Dir2 = "2";
  if(DirectoryExists(Dir1))
  if(DirectoryExists(Dir2))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir1.c_str());
     _tcscpy(cDest,Dir2.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
  TSearchRec SR;
  if(FindFirst("*.log", faAnyFile, SR) == 0)
   {
     do
       DeleteFile(SR.Name);
     while (FindNext(SR) == 0);
     FindClose(SR);
   }
  ChDir(ExtractFilePath(Application->ExeName));
Код удаляет только одну папку из указанных а нужно удалить две папки
Как исправить?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2014, 15:30
Ответы с готовыми решениями:

Удаление папок
#include <vcl.h> #include "dstring.h" #pragma hdrstop #include "Unit1.h" ...

Удаление папок с неявно заданым именем
Использую код для удаления папок bool DeleteDir(AnsiString DirName) //ôóíêöèÿ óäàëåíèÿ ïàïîê { TSearchRec sr; if...

Удаление нескольких папок пользователя при нажатии кнопки
Доброго времени суток господа!! помогите пожалуйста в начинаниях!! Как удалить подпапку в папке пользователя!! void __fastcall...

23
place status here
 Аватар для gunslinger
3186 / 2220 / 640
Регистрация: 20.07.2013
Сообщений: 6,010
24.12.2014, 16:18
Так применяй код удаления для каждой папки.
А то ты сначала присваиваешь cDest значение первой папки, потом сразу второй и удаляешь. Первое присвоение "пропадает". Ты сначала проведи все операции для Dir1, а потом уже для Dir2.
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:02  [ТС]
Цитата Сообщение от gunslinger Посмотреть сообщение
Так применяй код удаления для каждой папки.
А то ты сначала присваиваешь cDest значение первой папки, потом сразу второй и удаляешь. Первое присвоение "пропадает". Ты сначала проведи все операции для Dir1, а потом уже для Dir2.
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
String Dir1 = "1";
  String Dir2 = "2";
  if(DirectoryExists(Dir1))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir1.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
   if(DirectoryExists(Dir2))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir2.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
  TSearchRec SR;
  if(FindFirst("*.log", faAnyFile, SR) == 0)
   {
     do
       DeleteFile(SR.Name);
     while (FindNext(SR) == 0);
     FindClose(SR);
   }
  ChDir(ExtractFilePath(Application->ExeName));
Добавлено через 19 секунд
Так всё работает

Добавлено через 1 минуту
Я хочу сделать чтобы функцию удаления не писать каждый раз к каждой папке
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 17:04
Цитата Сообщение от Wnaralelyd Посмотреть сообщение
Так всё работает
Работает,но гораздо красивее и рациональнее вынести операцию удаления папки в отдельную функцию, в которую будет передаваться имя удаляемой папки в качестве параметра.
Цитата Сообщение от Wnaralelyd Посмотреть сообщение
Я хочу сделать чтобы функцию удаления не писать каждый раз к каждой папке
Вот-вот, верной дорогой идете, товарищ!
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:17  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
верной дорогой идете
Так я и хочу сделать,чтобы чуть меньше кода было
Но знания слабоваты!

Добавлено через 7 минут
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
String Dir1 = "1";
  String Dir2 = "2";
  if(DirectoryExists(Dir1))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir1.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
   if(DirectoryExists(Dir2))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir2.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
  TSearchRec SR;
  if(FindFirst("*.log", faAnyFile, SR) == 0)
   {
     do
       DeleteFile(SR.Name);
     while (FindNext(SR) == 0);
     FindClose(SR);
   }
  ChDir(ExtractFilePath(Application->ExeName));
  {
      TRegistry *reg=new TRegistry();
     reg->RootKey=HKEY_CURRENT_USER;
     reg->DeleteKey("Test");
     delete reg;
  }
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 17:17
Цитата Сообщение от Wnaralelyd Посмотреть сообщение
Но знания слабоваты!
Дык у тебя же все уже есть...
Вот, оформляешь такую вот функцию...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void DeleteDir(String Folder)
{
  if(DirectoryExists(Folder))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir1.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
}
Можно эту функцию включить в класс формы, можно просто так использовать.
И в каком-либо обработчике события вызываешь эту самую функцию, примерно так

C++
1
2
DeleteDir("C:\\1");
DeleteDir("C:\\2");
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:25  [ТС]
После такого код может быть огромным

Добавлено через 7 минут
Цитата Сообщение от D1973 Посмотреть сообщение
Дык у тебя же все уже есть...
Вот, оформляешь такую вот функцию...
Не получилось !
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 17:27
Что там могло не получиться????
Ты бы уж хотя бы ошибку привел... Для интереса...
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:28  [ТС]
Это все в одном обработчике (таймер)
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 17:30
Ну дык вынеси функцию за обработчик таймера, всего и делов
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:36  [ТС]
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
DeleteDir("1");
  DeleteDir("2");
  if(DirectoryExists(Folder))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir1.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
  TSearchRec SR;
  ChDir(Dir2);
  if(FindFirst("*.log", faAnyFile, SR) == 0)
   {
     do
       DeleteFile(SR.Name);
     while (FindNext(SR) == 0);
     FindClose(SR);
   }
  ChDir(ExtractFilePath(Application->ExeName));
не надо создать функцию это все буду запихивать в таймер!

Добавлено через 1 минуту
Цитата Сообщение от D1973 Посмотреть сообщение
Ну дык вынеси функцию за обработчик таймера, всего и делов
это всё в таймер,не знаю как вызвать функцию удаления
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 17:37
Ну не надо, так не надо - запихивай. Вопрос-то в чем?
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:38  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Ну дык вынеси функцию за обработчик таймера, всего и делов
Это все должно происходить автоматически а не вручную!
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:44  [ТС]
Код в таймере он не компилирует (голый проект)
Вложения
Тип файла: rar Новая папка (2).rar (4.04 Мб, 11 просмотров)
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 17:52
Вот который раз уже под разными никами ты жуешь и жуешь одну и ту же тему...
За это время можно было хотя бы с основными конструкциями языка познакомиться поближе...

Вот так примерно начинается твой модуль
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
//---------------------------------------------------------------------------
 
#include <vcl.h>
#pragma hdrstop
 
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
//Вот прямо сюда и пиши функцию !!!
void DeleteDir(String Folder)
{
  if(DirectoryExists(Folder))
   {
     TCHAR cDest[MAX_PATH] = {0};
     _tcscpy(cDest,Dir1.c_str());
     SHFILEOPSTRUCT fos;
     memset(&fos, 0, sizeof(SHFILEOPSTRUCT));
     fos.hwnd = Application->Handle;
     fos.wFunc = FO_DELETE;
     fos.pFrom = cDest;
     fos.fFlags = FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
     SHFileOperation(&fos);
   }
}
//А вот тут - обработчик твоего таймера
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
   DeleteDir("1");
   DeleteDir("2"); 
//Вот только пути желательно полные указывать
  TSearchRec SR;
  ChDir(Dir2);
  if(FindFirst("*.log", faAnyFile, SR) == 0)
   {
     do
       DeleteFile(SR.Name);
     while (FindNext(SR) == 0);
     FindClose(SR);
   }
  ChDir(ExtractFilePath(Application->ExeName));
}
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:59  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Вот так примерно начинается твой модуль
ошибка 23 строка

Добавлено через 15 секунд
Checking project dependencies...
Compiling Project1.cbproj (Debug, Win32)
bcc32 command line for "Unit1.cpp"
c:\program files (x86)\embarcadero\studio\15.0\bin\bcc32. exe -D_DEBUG -DUSEPACKAGES -n.\Win32\Debug -I"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"C:\Program Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39\boost\tr1\tr1";"C:\Program
Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39";"c:\program files (x86)\embarcadero\studio\15.0\include";" c:\program files
(x86)\embarcadero\studio\15.0\include\di nkumware";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\crtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\sdk";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\rtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\fmx";"C:\Program Files
(x86)\FastReports\LibD21";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE7\Win32";C:\Users\Public\Documents\Emb arcadero\Studio\15.0\hpp\Win32 -y -Q -k
-r- -c -tR -tM -tU -tW -C8 -o.\Win32\Debug\Unit1.obj -w-par -Od -v -vi- -H=.\Win32\Debug\Project1.pch -H Unit1.cpp
[bcc32 Error] Unit1.cpp(29): E2451 Undefined symbol 'DeleteDir1'
Full parser context
Unit1.cpp(25): parsing: void DeleteDir(UnicodeString)
[bcc32 Error] Unit1.cpp(86): E2451 Undefined symbol 'Dir2'
Full parser context
Unit1.cpp(76): parsing: void _fastcall TForm1::Timer1Timer(TObject *)
Failed
Elapsed time: 00:00:00.1
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 18:04
Что такое DeleteDir1? И что такое Dir2? Ты знаешь? Я - нет.
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 18:12  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Что такое DeleteDir1? И что такое Dir2? Ты знаешь? Я - нет.
23 строку закомментировал компилирует но ничего не удаляет
0
Модератор
 Аватар для D1973
9908 / 6445 / 2455
Регистрация: 21.01.2014
Сообщений: 27,354
Записей в блоге: 3
24.12.2014, 18:20
Вот так ее запиши
C++
1
_tcscpy(cDest, Folder.c_str());
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 18:29  [ТС]
Checking project dependencies...
Compiling Project1.cbproj (Debug, Win32)
bcc32 command line for "Unit1.cpp"
c:\program files (x86)\embarcadero\studio\15.0\bin\bcc32. exe -D_DEBUG -DUSEPACKAGES -n.\Win32\Debug -I"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"C:\Program Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39\boost\tr1\tr1";"C:\Program
Files (x86)\Embarcadero\Studio\15.0\include\bo ost_1_39";"c:\program files (x86)\embarcadero\studio\15.0\include";" c:\program files
(x86)\embarcadero\studio\15.0\include\di nkumware";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\crtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\sdk";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\rtl";"c:\program files
(x86)\embarcadero\studio\15.0\include\wi ndows\vcl";"c:\program files (x86)\embarcadero\studio\15.0\include\wi ndows\fmx";"C:\Program Files
(x86)\FastReports\LibD21";"C:\Program Files (x86)\Raize\CS5\Lib\RS-XE7\Win32";C:\Users\Public\Documents\Emb arcadero\Studio\15.0\hpp\Win32 -y -Q -k
-r- -c -tR -tM -tU -tW -C8 -o.\Win32\Debug\Unit1.obj -w-par -Od -v -vi- -H=.\Win32\Debug\Project1.pch -H Unit1.cpp
[bcc32 Error] Unit1.cpp(86): E2451 Undefined symbol 'Dir2'
Full parser context
Unit1.cpp(76): parsing: void _fastcall TForm1::Timer1Timer(TObject *)
Failed
Elapsed time: 00:00:00.1

строка 40 ошибка
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.12.2014, 18:29
Помогаю со студенческими работами здесь

Поиск и удаление пустых папок, а также все вложенные пустые папки
Прошу люди гении, подскажите мне код на С++ для этой задачки. Я буду очень рад и благодарен вам.

Удаление папок
У меня есть 2 папки Logs и Cache и вних пишутся логи и кеш. как при нажатие на кнопку удалить папки и то что вних?

Удаление папок
Нужно удалить сразу несколько папок с файлами. Наткнулся на следующий код, но директории не удаляются. import os import shutil ...

Удаление папок от 1 до 10
Есть 10 папок с названиями 1..2..3.Как их удалить програмно?

Удаление папок
Здравствуйте. Как можно вызвать, что бы в определённой папке, удалились все папки с в их вложенными файлами, при этом, запретить удаление...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru