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

 
Удаление директории
Konstantine
  Отправлено: 28.10.2004, 09:28


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

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



есть ли функция, удаляющая сразу всю директорию с содержимым?
если есть, то какая?
Gal
Отправлено: 28.10.2004, 11:59


Станционный диспетчер

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



// Для удаления директории напишите следующий код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
SHFILEOPSTRUCT sh;
sh.hwnd=Form1->Handle;
sh.wFunc = FO_DELETE;
sh.pFrom = "c:\\test\0"; //удаляемая директория
sh.pTo = NULL;
sh.fFlags = FOF_NOCONFIRMATION | FOF_SILENT;
sh.hNameMappings = 0;
sh.lpszProgressTitle = NULL;
SHFileOperation(&sh);
}
Gal
Отправлено: 28.10.2004, 12:07


Станционный диспетчер

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



// Для того чтобы удалить папку и все файлы в ней напишите следующую функцию:
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 );// сброс всяких 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;
}
Doga
Отправлено: 04.11.2004, 14:39


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

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



SHFileOperation
Copies, moves, renames, or deletes a file system object.


int SHFileOperation(LPSHFILEOPSTRUCT lpFileOp);


Parameters
lpFileOp
[in] Address of an SHFILEOPSTRUCT structure that contains information this function needs to carry out the specified operation. This parameter must contain a valid value that is not NULL. You are responsibile for validating the value. If you do not validate it, you will experience unexpected results.

Return Values
Returns zero if successful, or nonzero otherwise.

** Gal
Отправлено: 09.11.2004, 16:34


Не зарегистрирован







AnsiString way = Edit1->Text;

if (!DirectoryExists(way))
{
ForceDirectories(way);
if (DirectoryExists(way))
Edit1->Text = way;
}

Удаляет вместе с подкаталогами!
** Gal
Отправлено: 09.11.2004, 16:55


Не зарегистрирован







Прошу прощения за предыдущий ответ — это создание каталога.
Удаление
bool RemoveDir(const System::AnsiString Dir)
Определение существует ли каталог
bool DirectoryExists(const System::AnsiString Name)

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