Различия

Показаны различия между двумя версиями страницы.


reshenie_zadachi_11 [2025/07/06 12:39] (текущий) – создано - внешнее изменение 127.0.0.1
Строка 1: Строка 1:
 +====== Задача 11: Написать программу для удаления вложенных каталогов и файлов ======
 +[[zadachi._olimpiady]]
  
 +**Задача 11:** Программа для удаления каталогов (удаляются все вложенные папки и файлы). В том случае, если у удаляемого файла (каталога) установлен атрибут Read-Only, необходимо вывести следующее меню: 1. Удалять? 2. Пропустить? 3.Удалять для всех? 4. Отмена?
 +
 +Код ниже просто рекурсивно удаляет все вложенные файлы и директории, без запроса на Read-Only
 +
 +Решение с использованием языка CPP:<file cpp>
 +/* 
 + * File:   delete.cpp
 + * Author: darkfire
 + *
 + * Created on January 3, 2011, 10:08 PM
 + */
 +
 +#include <cstdlib>
 +#include <cstring>
 +#include <iostream>
 +#include <io.h>
 +#include <direct.h>
 +#include <sys/stat.h>
 +
 +using namespace std;
 +
 +bool DeleteDir(char DirName[_MAX_PATH]) //DirName нигде не меняем
 +{
 + char DirNameNow[_MAX_PATH];
 + char FileNameNow[_MAX_PATH];
 + strcpy(DirNameNow,DirName);
 +
 +//добавим маску поиска и конечный слеш, если не задан
 + if(DirNameNow[strlen(DirNameNow)-1]=='\\') strcat(DirNameNow,"*.*");
 + else strcat(DirNameNow,"\\*.*");
 + //char DirNameNext[_MAX_PATH];
 + _finddata_t *fileinfo = new _finddata_t;
 + long done = _findfirst(DirNameNow, fileinfo);// Начинаем поиск
 + // если done будет равняться -1,  то поиск вести бесмысленно
 + int Way = done;
 +
 + while (Way!=-1){
 + if (fileinfo->attrib & _A_SUBDIR)
 + {// найдена директория
 + if (!((strlen(fileinfo->name)==2)&&strstr(fileinfo->name,"..") ||(strlen(fileinfo->name)==1)&&strchr(fileinfo->name,'.')))// это удалять не надо
 + {//рекурсивный вызов
 + strcpy(DirNameNow,DirName);
 + strcat(DirNameNow,"\\");
 + strcat(DirNameNow,fileinfo->name);
 + DeleteDir(DirNameNow);
 + //cout<<DirNameNow<<" this dir\n";
 + if( _rmdir(DirNameNow) != 0 ) perror( "Error directory" ); // удаляем теперь уже пустой директории
 + //_rmdir(DirNameNow); 
 + }
 + }else
 + {// найден файл
 + strcpy(FileNameNow,DirName);
 + strcat(FileNameNow,"\\");
 + strcat(FileNameNow,fileinfo->name);
 + _chmod( FileNameNow, _S_IWRITE ); // сбрасываем атрибуты
 + if( remove(FileNameNow) != 0 ) perror( "Error deleting file" );
 +
 + }
 + // Пытаемся найти следующий файл из группы
 + Way = _findnext(done, fileinfo);
 + }
 +
 + // Очистка памяти
 + _findclose(done);
 + delete fileinfo;
 +
 + return true;
 +}
 +
 +int main(int argc, char** argv) {
 +    char str[_MAX_PATH]; //_MAX_PATH is defined in Stdlib.h as 260 bytes.
 +    if(argc==2){
 +        strcpy(str,argv[1]);//скопируем путь в str
 + DeleteDir(str);//функция удаления файлов и вложенных директорий
 +    }
 + else{
 + cout << "Error. No argument.\n";
 + exit(1);
 + };
 +
 +    return (EXIT_SUCCESS);
 +}
 +</file>

📌 Удобный подбор VPS по параметрам доступен на DIEGfinder.com - официальном инструменте проекта DIEG. Это часть единой экосистемы, созданной для того, чтобы помочь быстро найти подходящий VPS/VDS сервер для любых задач хостинга.

📌 Для тестирования скриптов, установщиков VPN и Python-ботов рекомендуем использовать надежные VPS на короткий срок. Подробнее о быстрой аренде VPS для экспериментов - читайте здесь.

💥 Подпишись в Телеграм 💥 и задай вопрос по сайтам и хостингам бесплатно!