C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
удаление папки
Dr.Phoenix
Отправлено: 28.10.2003, 19:43


Дежурный стрелочник

Группа: Участник
Сообщений: 48



как правильно удалить папку со всеми вложенными файлами и подпапками?
Георгий
Отправлено: 28.10.2003, 21:09


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Кто-то уже нечто аналогичное делал (вроде даже удаление) — посмотри в поиске
exp
Отправлено: 28.10.2003, 22:36


Мастер участка

Группа: Участник
Сообщений: 304



Во, наконец наваял...
Вроде работает


Если фаилик не присоединится, то вот главная процедура
bool DeleteDir(AnsiString DirName)
{
TSearchRec sr;
if (DirName.Length())
{
if (!FindFirst(DirName+"\*.*",faAnyFile,sr))
{
if (!(sr.Name=="." || sr.Name==".."))// то, что удалять не надо
if (((sr.Attr & faDirectory) == faDirectory ) ||
(sr.Attr == faDirectory))//найдена папка
{
FileSetAttr(DirName+"\"+sr.Name, faDirectory );// сброс read-only
DeleteDir(DirName+"\"+sr.Name);//рекурсивное удаление содержания папки
RemoveDir(DirName + "\"+sr.Name);// удаление уже пустой папки
}
else// иначе найден файл
{
FileSetAttr(DirName+"\"+sr.Name, 0);// сброс read-only
DeleteFile(DirName+"\"+sr.Name);// удаляем файл
}
}
while (!FindNext(sr));// опять ищем пока не найдем все
FindClose(sr);
}
RemoveDir(DirName);
return true;
}

Да, блин, извините, но пошу прощения, в исходниках не описан класс формы, так что киньте на форму следующее:
DriveComboBox
DirectoryListBox
Лабелу и бутону;

Отредактировано exp — 01/11/2003, 02:34

User Attached Image Скачать файл
Deleting.rar


Gedeon
Отправлено: 29.10.2003, 15:40


Ветеран

Группа: Модератор
Сообщений: 1742



В RxLib есть функция ClearDir
exp
Отправлено: 01.11.2003, 01:33


Мастер участка

Группа: Участник
Сообщений: 304



Прошу прощения за недоразумение.
В прошлых исходниках была ошибка.

Здесь её нет. + Bonus: Копирование фаилов.

User Attached Image Скачать файл
DeletingCopyingrar.rar


Dr.Phoenix
Отправлено: 01.11.2003, 11:17


Дежурный стрелочник

Группа: Участник
Сообщений: 48



что-то файл не грузится... можно исходник в ответе показать, если не трудно?
exp
Отправлено: 02.11.2003, 00:34


Мастер участка

Группа: Участник
Сообщений: 304



CODE


bool DeleteDir(AnsiString DirName)
{
TSearchRec sr;
if (DirName.Length())
{
if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))
do
 {
 if (!(sr.Name=="." || sr.Name==".."))// это не удаляем
  if (((sr.Attr & faDirectory) == faDirectory ) ||
  (sr.Attr == faDirectory))// найдена папка
   {
   FileSetAttr(DirName+"\\"+sr.Name, faDirectory );
   DeleteDir(DirName+"\\"+sr.Name);//рекурсивно удаляем найденную папку
   RemoveDir(DirName + "\\"+sr.Name);// удаляем уже пустую папку
   }
   else// найден файл
   {
   FileSetAttr(DirName+"\\"+sr.Name, 0);
   DeleteFile(DirName+"\\"+sr.Name);// удаляем файл
   }
 }
while (!FindNext(sr));// ищем пока не найдем все
FindClose(sr);
}
RemoveDir(DirName);
return true;
}


Здесь параметр функции — путь к папке


Копирование по аналогии.
CODE

bool CopyDir(AnsiString DirName,AnsiString CopyTo)
{
TSearchRec sr;
if ((DirName.Length())&(CopyTo.Length()))
{
if (!FindFirst(DirName+"\\*.*",faAnyFile,sr))
do
 {
 if (!(sr.Name=="." || sr.Name==".."))// это не копируем
  if (((sr.Attr & faDirectory) == faDirectory ) ||
  (sr.Attr == faDirectory))// найдена папка
   {
   FileSetAttr(DirName+"\\"+sr.Name, faDirectory );
   CreateDir(CopyTo+"\\"+sr.Name);// создаем папку-копию(пустую)
   CopyDir(DirName+"\\"+sr.Name,CopyTo+"\\"+sr.Name);//рекурсивно копируем в неё файлы
   }
   else// найден файл
   {
   FileSetAttr(DirName+"\\"+sr.Name, 0);
   CopyFile((DirName+"\\"+sr.Name).c_str(),(CopyTo+"\\"+sr.Name).c_str(),0);// копируем файл
   }
 }
while (!FindNext(sr));// копируем пока не скопируем всё
FindClose(sr);
}
RemoveDir(DirName);
return true;
}


Ну сейчас уже точно всё.
Admin
Отправлено: 02.11.2003, 11:14


Владимир

Группа: Администратор
Сообщений: 1190



SHFileOperation() + FO_DELETE

http://www.rsdn.ru/qna/?baseserv/delfold.xml

и вообще советую почаще заходить на сайты,
указанные в разделе "Ссылки"

Там указаны "конкретные" сайты.

Присоединить изображение

Присоединить изображение


Вернуться в Вопросы программирования в C++Builder