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
|
|
Gedeon |
Отправлено: 29.10.2003, 15:40 |
|
Ветеран
Группа: Модератор
Сообщений: 1742
|
В RxLib есть функция ClearDir
|
|
exp |
Отправлено: 01.11.2003, 01:33 |
|
Мастер участка
Группа: Участник
Сообщений: 304
|
Прошу прощения за недоразумение.
В прошлых исходниках была ошибка.
Здесь её нет. + Bonus: Копирование фаилов.
|
|
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
и вообще советую почаще заходить на сайты,
указанные в разделе "Ссылки"
Там указаны "конкретные" сайты.
Присоединить изображение
|
|