Your Ad Here
/*
Autore: Red Skull 92
Programma : Dir Maker
Web : Www.RedSkull92.Wordpress.Com
Mail : RedSkull92 AT gmail DOT com
*/
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#include <unistd.h>
//Dichiaro i prototipi
void _pwd();
void _cd();
void _catdir();
void _crea();
void _canc();
void _about();
void leggodir(char *dire);
void canc_dir();

//Inizio Main
int main()
{
	//Dichiaro come intero risp
	int risp;
	//Inizio il ciclo Do-While
	do
	{
		printf("\n$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
		"$   Autore:Red Skull 92  $\n"
		"$   Titolo:Dir Maker     $\n"
		"$          Menu          $\n"
		"$     Cosa vuoi Fare ?   $\n"
		"$  0)Directory Corrente  $\n"
		"$  1)Cambia Directory    $\n"
		"$  2)Controlla Directory $\n"
		"$  3)Crea Directory      $\n"
		"$  4)Cancella Directory  $\n"
		"$  5)About               $\n"
		"$  6)Esci                $\n"
		"$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
		"Risposta: ");
		//Se Risp non è un intero esco
		if(!(scanf("%d",&risp))){
			printf("Scelta non Valida!\n");
			break;}
		putchar('\n');
		switch (risp)
		{
		case 0:
			_pwd();
			break;
		case 1:
			_cd();
			break;
		case 2:
			_catdir();
			break;
		case 3:
			_crea();
			break;
		case 4:
			_canc();
			break;
		case 5:
			_about();
			break;
		default:
			printf("Opzione non valida ! ! !\n");
			break;
		}
	}
	//Se si digita 6 esco
	while (risp != 6);     
}
//Funzione _pwd (Stampa la directory di lavoro)          
void _pwd()
{
	getchar();
	char perche[FILENAME_MAX]; 
	//Con getcwd prendo la directory corrente e la salvo in perche
	getcwd(perche,sizeof(perche));  
	//Stampo il contenuto di perche       
	printf("\n%s\n\n",perche);
	printf("Premi Invio per tornare al menu.");
	getchar();
	getchar();
}
//Fine _pwd()
//Funzione _cd (Per cambiare directory)
void _cd()
{
	char nome[1024];
	printf("Inserisci il path della Directory di destinazione.\n");
	getchar();
	gets(nome);
	//Con chdir mi sposto da una directory all'altra
	if(!(chdir(nome)))
	{
		_pwd();
	}
	else
	{
		printf("Impossibile trovare il percorso specificato.\n\n");
		printf("Premi Invio per tornare al menu.");
		getchar();
	}  
}
//Fine _cd()           
//Funzione _catdir() (Per leggere il contenuto di una directory)
void _catdir()
{
	DIR *dir;
	struct dirent *leggo;
	//Apro la directory di lavoro
	dir=opendir(".");
	if (!dir)
	{
		printf("Impossibile aprire la directory\n");
		printf("Premi Invio per tornare al menu.");
		getchar();
		getchar();
	}
	printf("File e cartelle presenti:\n");
	//Faccio un ciclo fino a quando non vengono printati tutti i file
	while((leggo=readdir(dir)))
	{
		//I file . e .. non vengono printati
		if(!strcmp(leggo->d_name, ".") || !strcmp(leggo->d_name, "..")) continue;
		//Se riesco a leggere il file è un file altrimenti una cartella
		if(fopen(leggo->d_name,"r")==NULL)
		{
			printf("%s\n",strcat(leggo->d_name," ---DIR--- "));
		}
		else
		{
			printf("%s\n", leggo->d_name);
		}
	}
	printf("FINE\n");
	closedir(dir);
	printf("Premi Invio per tornare al menu.");
	getchar();
	getchar();
}
//Fine _catdir()
//Funzione _crea() (Permette di creare una cartella)     
void _crea()
{
	char nome[562];
	printf("Inserisci il nome della cartella da creare: ");
	getchar();
	gets(nome);
	//La funzione mkdir crea una cartella
	if(!(mkdir(nome)))
	{
		printf("Directory Creata con successo !\n");
		printf("Premi Invio per tornare al menu.");
		getchar();
		main();
	}
	else
	{
		printf("Impossibile creare la Directory!\n");
		printf("Premi Invio per tornare al menu.");
		getchar();
	}
}
//Fine _crea()
//Funzione _canc() (Permette di  decidere se cancellare o meno la directory corrente)
void _canc()
{   
	char y;
	printf("Sei sicuro di voler cancellare la cartella e tutti i suoi file? (Y/N) (y/n)\n");
	y=getchar();
	getchar();
	if (y == 'y' || y == 'Y')
	{
		canc_dir();
		printf("Premi Invio per tornare al menu.\n");
		getchar();
	}
	if (y == 'n' || y == 'N')
	{
		printf("Ritorno al menu...\n");
		getchar();
	}
}          
//Fine _canc()
//Funzione _about() (Stampa alcune info dell'autore)
void _about()
{
	printf("##################################\n"
	"##    Autore: Red Skull 92      ##\n"  
	"##    Titolo: Dir Maker         ##\n"
	"## Www.RedSkull92.Wordpress.Com ##\n"
	"##################################\n"
	"Premi Invio per tornare al menu.  \n");
	getchar();
	getchar();
}
// Fine _about()
//Funzione leggodir (Funzione ricorsiva per cancellare le sotto directory e i relativi file)
void leggodir( char *dire)
{
	chdir(dire);
	DIR *apro2;
	struct dirent *leggo1;
	apro2=opendir(".");
	while((leggo1=readdir(apro2)))
	{ 
		if(!strcmp(leggo1->d_name, ".") || !strcmp(leggo1->d_name, "..")) continue;
		if(remove(leggo1->d_name))
		{
			leggodir(leggo1->d_name);
		}
		else
		{
			printf("Il file %s presente nella directory %s e' stato cancellato\n",leggo1->d_name,dire);
		} 
	}
	// Mi sposto una directory indietro
	chdir("../");
	//Chiudo la directory precedentemente aperta
	closedir(apro2);
	//Cancella la directory (Solo se vuota)
	rmdir(dire);           
}
//Fine leggodir()
//Funzione canc_dir() (permette di verificare se ci sono cartelle o file  di richiamare la funzione ricorsiva)    
void canc_dir()
{
	DIR *apro;
	struct dirent *leggo0;
	int dir=0;
	char dove[FILENAME_MAX];
	getcwd(dove,sizeof(dove));
	printf("Cancellazione in corso...\n");

	chdir("../");
	if(rmdir(dove)==-1)
	{ 
		chdir(dove);
		apro=opendir(dove);
		while((leggo0=readdir(apro)))
		{ 
			if(!strcmp(leggo0->d_name, ".") || !strcmp(leggo0->d_name, "..")) continue;
			if(remove(leggo0->d_name))
			{
				leggodir(leggo0->d_name);
			}   
			else
			{     
				printf("Il file %s presente nella directory %s e' stato cancellato\n",leggo0->d_name,dove);
			}
		}
	}      
	else{
		printf("Cancellazione completata\n");
	}
	chdir("../");
	if(!rmdir(dove))
	{
		printf("La Cartella %s e' stata cancellata!\n",dove);
	}
	else
	{
		printf("Impossibile cancellare %s !!\n",dove);
	}
	closedir(apro);
}
//Fine canc_dir()

//By Red Skull 92

Dir Maker By Red Skull 92