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

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

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

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

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

27.04.2008, 08:15. Просмотров 1781. Ответов 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: ... голову ломал
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:58. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru