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) |
|