|
::Главная страница ::Delphi/Паскаль :: Статьи |
Для удаления каталога существует процедура RmDir, но эта функция может удалить лишь пустой каталог. Поэтому нужно создать свою процедуру, которая бы удаляла все подкаталоги файлы в заданном каталоге, а затем удаляла и сам каталог. Для удаления подкаталогов нужно использовать эту же функцию.
Чтобы было, что удалять, эта программа также умеет создавать каталоги с произвольными файлами и подкаталогами. Для этого создана рекуррентная процедура CreateRandom. MaxFolderCount ограничивает количество созданных каталогов, а MaxLen ограничивает максимальную длину пути.
Button1 создает систему каталогов с файлами, начиная с введенного в Edit1 каталога. Если имя каталога не полное (без начала пути) - путь восстанавливается. Button2 удаляет каталог с подкаталогами. Каталог берется из Edit1 по такому же принципу.
Скачать необходимые для компиляции файлы проекта можно на program.dax.ru. Доступны проекты для версий Delphi 3-6.
uses FileCtrl; const MaxFolderCount = 500; var FileCount, FolderCount, ErrorCount: integer; MaxLen: integer; // Удаление каталога: procedure DeleteDir(DirName: string); var sr: TSearchRec; FullName: string; begin try if FindFirst(DirName + '\*.*', faAnyFile, sr) = 0 then repeat if (sr.Name = '.') or (sr.Name = '..') then continue; FullName := DirName + '\' + sr.Name; { Если это файл - удаляется файл, если каталог - вызывается DeleteDir: } if sr.Attr and faDirectory = 0 then begin DeleteFile(FullName); inc(FileCount); // Изменение счетика end else DeleteDir(FullName); until FindNext(sr) <> 0; FindClose(sr); RmDir(DirName); // Удаление каталога inc(FolderCount); // Изменение счетика except inc(ErrorCount) end; end; // Создание каталога со случайными файлами и подкаталогами: procedure CreateRandom(const root: string); // Создание случайной строки длиной len: function RndStr(len: integer): string; var i: integer; begin SetLength(result, len); for i := 1 to len do result[i] := chr(ord('a') + random(26)); end; var F: File; begin try ForceDirectories(root); // Создание каталога inc(FolderCount); // Изменение счетика while random(5) <> 1 do begin // Создание файла: AssignFile(F, root + '\' + RndStr(random(5) + 5) + '.' + RndStr(3)); Rewrite(F); CloseFile(F); inc(FileCount); // Изменение счетика end; if length(root) < maxlen then while (FolderCount < MaxFolderCount) and (random(10) <> 1) do // Создание каталога с подкаталогами: CreateRandom(root + '\' + RndStr(random(5) + 5)); except inc(ErrorCount) end; end; procedure TForm1.Button1Click(Sender: TObject); begin Form1.Caption := 'Wait please...'; // Восстановление полного имени каталога: Edit1.Text := ExpandFileName(Edit1.Text); { Утсановка максимальной длины пути (для ограничения числа подкаталогов): } MaxLen := Length(Edit1.Text) + 20; randomize; // Обнуление счетчиков: FileCount := 0; FolderCount := 0; ErrorCount := 0; // Создание каталога со случайными файлами и подкаталогами: CreateRandom(Edit1.Text); Form1.Caption := Format('Created: Folders - %d, files - %d, errors - %d', [FolderCount, FileCount, ErrorCount]); end; procedure TForm1.Button2Click(Sender: TObject); begin // Восстановление полного имени каталога: Edit1.Text := ExpandFileName(Edit1.Text); // Проверка существования каталога: if DirectoryExists(Edit1.Text) then begin Form1.Caption := 'Wait please...'; // Обнуление счетчиков: FileCount := 0; FolderCount := 0; ErrorCount := 0; // Удаление каталога с файлами и подкаталогами: DeleteDir(Edit1.Text); Form1.Caption := Format('Deleted: Folders - %d, files - %d, errors - %d', [FolderCount, FileCount, ErrorCount]); end else ShowMessage('Каталог "' + Edit1.Text + '" Не существует'); end;Даниил Карапетян
Тематические
ссылки
|
Ваша ссылка | Ваша ссылка |
Обмен кнопками, ведение статистики, реклама. |
|||