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

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

24.12.2014, 15:30. Показов 2051. Ответов 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
3187 / 2221 / 640
Регистрация: 20.07.2013
Сообщений: 6,017
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
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 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
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 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
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 3
24.12.2014, 17:27
Что там могло не получиться????
Ты бы уж хотя бы ошибку привел... Для интереса...
0
0 / 0 / 0
Регистрация: 24.12.2014
Сообщений: 13
24.12.2014, 17:28  [ТС]
Это все в одном обработчике (таймер)
0
Модератор
 Аватар для D1973
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 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
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 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
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 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
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 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
9919 / 6455 / 2456
Регистрация: 21.01.2014
Сообщений: 27,397
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru