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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Какая буква соответствует дисководу? http://www.cyberforum.ru/cpp-beginners/thread7684.html
Как определить какие имена дисков в ОС соответствуют дискетам. По умолчанию это A и B, но ведь это можно менять. А мне в программе нужно, чтобы определенная функция выполнялась только для дискет. ...
C++ Написать программу сложения двух матриц А и В размерами 4 на 5 уСЛОВИЕ: Написать программу сложения двух матриц А и В размерами 4 на 5. Найти суммы элементов получившейся матрицы по столбцам. И написать блок-схему к задачи Помогите плизз,а то язык... http://www.cyberforum.ru/cpp-beginners/thread7676.html
C++ Класс динамической строки
Перед сессией завалили лабами. Вроде почти все сделала. А с этой задачкой никак не разберусь. Может кто-нить поможет, пожалуйсто, оч нужно. Реализовать класс: Динамическая строка. Данными члена...
C++ проблема с присваиванием симовла по указателю
Здравствуйте, всем! У меня проблем с присваиванием символа по указателю строки. Компилятор пропускает (V Studio 2005), ошибка появляется уже при выполнении программы. На другом форуме мне сказали,...
C++ Построить массив из элементов матрицы http://www.cyberforum.ru/cpp-beginners/thread7609.html
Господа, помогите, пожалуйста. Есть очень простая задача: Дана квадратная матрица А размерностью от 2 до 10, необходимо построить массив В, в котором будет последовательность из нулей и единиц,...
C++ что почитать? какую книгу лучше взять по С Visual???? то нить написанное доступным языком(читать: для даунов)??:'( подробнее

Показать сообщение отдельно
warobushek
2 / 2 / 0
Регистрация: 08.03.2008
Сообщений: 82

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

27.04.2008, 08:15. Просмотров 1835. Ответов 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: ... голову ломал
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru