Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
warobushek
2 / 2 / 0
Регистрация: 08.03.2008
Сообщений: 82
#1

Удаление непустого каталога - C++

27.04.2008, 08:15. Просмотров 1826. Ответов 1
Метки нет (Все метки)

Написал функцию удаления непустого каталога deltree, компилируется нормально, да и с логикой ВРОДЕ все норм, т.к. блок-схему сперва составлял. В чем дело?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include <SYS\STAT.H>
#include <IO.H>
#include <stdio.h>
#include <dir.h>
#include <DOS.H>
#define OSHYD { printf("Ошибка удаления\n");\
              return 1; }
#define ANYFILE FA_RDONLY|FA_HIDDEN|FA_SYSTEM|FA_LABEL|FA_DIREC|FA_ARCH|FA_NORMAL
 
char dchdir(char *dirname)
/*смена текущей директории на любом диске  c переходом на него*/
{//0-success, !0-failure
 if(strlen(dirname)>=3)
 {
    char c=dirname[3];
    dirname[3]='\0';
    if(isdisk(dirname)==0)
    {
        dirname[3]=c;
        if(_chdrive(dirname[0]-'A'+1)==-1)
            return -1;
    }
    dirname[3]=c;
 }
    if(chdir(dirname))
       return -2;
    return 0;
}//dchdir
 
 
int deltree(char *dirname)
{//0-success,1-failure
char dchdir(char *dirname);
        int done;
        struct ffblk ffblk;
        if(dchdir(dirname))
            OSHYD
       done = findfirst("*.*",&ffblk,ANYFILE);
       while(!done)
       {
           if(ffblk.ff_attrib&FA_DIREC)
              /*РЕКУРСИВНЫЙ ВЫЗОВ*/
              if(deltree(ffblk.ff_name))
                    return 1;
              else ;
           else
           {
              if(ffblk.ff_attrib&FA_RDONLY)
                 if(chmod(ffblk.ff_name,S_IREAD|S_IWRITE)==0) ;
                 else
                      OSHYD
              else ;
              if(unlink(ffblk.ff_name))
                      OSHYD
           }//else
 
           done=findnext(&ffblk);
       }//while
       if(dchdir(".."))
       {
          printf("Ошибка возврата в родительскую директорию\n");
          return 1;
       }
       if(rmdir(dirname))
       {
            printf("Ошибка удаления %s\n",dirname);
            return 1;
       }
   return 0;
}//deltree
Добавлено через 14 часов 0 минут
Если кому интересно, то проблема была перед рекурсивным вызовом (жирным выделено то, чего не хватало)
C++
1
2
3
4
5
6
7
8
9
10
11
...
                      
           if(ffblk.ff_attrib&FA_DIREC)
             if(strcmp(ffblk.ff_name,".")!=0 && strcmp(ffblk.ff_name,"..")!=0) // <---
              /*РЕКУРСИВНЫЙ ВЫЗОВ*/
              if(deltree(ffblk.ff_name))
                    return 1;
              else ;
             [B]else ;[/B]
                        else
...
а я :huh: ... голову ломал
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.04.2008, 08:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Удаление непустого каталога (C++):

Операции создания каталога, изменения временного каталога, удаление файла и директории - C++
Написать программу, которая позволяет выполнять операции создания каталога, изменения временного каталога, удаление файла и директории...

перации создания каталога, изменения временного каталога, удаление файла и директории (рекурсивно) - C++
пожалуйста напишите программу, которая позволяет выполнять операции создания каталога, изменения временного каталога, удаление файла и...

Написать программу, которая обеспечивает:начальное формирование каталога файлов;вывод каталога файлов;удаление файлов... - C++
Уважаемые хакеры!Прошу вашей помощи!Я в СИ не особо шарю.((( А на днях уже сдавать.Очень рассчитываю на любую вашу помощь. Вот задача. ...

Дописать удаление товаров из каталога - C++
Разработать программу ведения каталога товаров на основе структур, имеющих следующие поля: номер, дата, наименование товара, цена,...

Запуск и последующее удаление всех исполняемых файлов из каталога - C++
Здравствуйте. Прошу помочь написать программу, которая бы запускала все исполняемые файлы (.exe, .bat, .cmd) из заданного каталога, а потом...

Borland C++. Для непустого слова Р определить... - C++
Очень срочно нужна помощь в решении любой из этих двух задач. Завтра надо сдать к зачету, а из-за работы узнал только сейчас, заранее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BaltoZor
Сообщений: n/a
24.01.2012, 00:59 #2
Пишет "Function 'isdisk' should have a prototype"
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2012, 00:59
Привет! Вот еще темы с ответами:

Удалить из непустого списка L последний элемент. - C++
Прошу помочь решить задачки!:(очень нужно (Билет №15) Удалить из непустого списка L последний элемент. Правила форума

Ввод непустого массива с клавиатуры и проверка симметричности - C++
Напишите программу, которая вводит с клавиатуры непустой массив целых чисел, и печатает Yes, если массив симметричен, и No иначе.

Вычислить среднее арифметическое элементов непустого списка - C++
Нужно написать программу, буду благодарен тем, кто поможет. Вычислить среднее арифметическое элементов непустого списка

Поменять местами первый и последний элементы непустого списка - C++
Тема: динамические структуры: списки и очереди C++ Поменять местами первый и последний элементы непустого списка. Решить задачу для...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru