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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
warobushek
 Аватар для warobushek
2 / 2 / 0
Регистрация: 08.03.2008
Сообщений: 82
27.04.2008, 08:15     Удаление непустого каталога #1
Написал функцию удаления непустого каталога deltree, компилируется нормально, да и с логикой ВРОДЕ все норм, т.к. блок-схему сперва составлял. В чем дело?
Код
#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 минут
Если кому интересно, то проблема была перед рекурсивным вызовом (жирным выделено то, чего не хватало)
Код
...
                      
		   if(ffblk.ff_attrib&FA_DIREC)
[B]			 if(strcmp(ffblk.ff_name,".")!=0 && strcmp(ffblk.ff_name,"..")!=0)[/B]
			  /*РЕКУРСИВНЫЙ ВЫЗОВ*/
			  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++ Borland C++. Для непустого слова Р определить...
C++ Вычислить среднее арифметическое элементов непустого списка
C++ Удалить из непустого списка L последний элемент.
Ввод непустого массива с клавиатуры и проверка симметричности C++
C++ Запуск и последующее удаление всех исполняемых файлов из каталога

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
BaltoZor
Сообщений: n/a
24.01.2012, 00:59     Удаление непустого каталога #2
Пишет "Function 'isdisk' should have a prototype"
Yandex
Объявления
24.01.2012, 00:59     Удаление непустого каталога
Ответ Создать тему
Опции темы

Текущее время: 17:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru