- /*
- 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
- {
- "$ 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))){
- 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:
- 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
- getchar();
- getchar();
- }
- //Fine _pwd()
- //Funzione _cd (Per cambiare directory)
- void _cd()
- {
- char nome[1024];
- getchar();
- gets(nome);
- //Con chdir mi sposto da una directory all'altra
- if(!(chdir(nome)))
- {
- _pwd();
- }
- else
- {
- 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)
- {
- getchar();
- getchar();
- }
- //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)
- {
- }
- else
- {
- }
- }
- closedir(dir);
- getchar();
- getchar();
- }
- //Fine _catdir()
- //Funzione _crea() (Permette di creare una cartella)
- void _crea()
- {
- char nome[562];
- getchar();
- gets(nome);
- //La funzione mkdir crea una cartella
- if(!(mkdir(nome)))
- {
- getchar();
- main();
- }
- else
- {
- getchar();
- }
- }
- //Fine _crea()
- //Funzione _canc() (Permette di decidere se cancellare o meno la directory corrente)
- void _canc()
- {
- char y;
- y=getchar();
- getchar();
- if (y == 'y' || y == 'Y')
- {
- canc_dir();
- getchar();
- }
- if (y == 'n' || y == 'N')
- {
- getchar();
- }
- }
- //Fine _canc()
- //Funzione _about() (Stampa alcune info dell'autore)
- void _about()
- {
- "## 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
- {
- }
- }
- // 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));
- 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
- {
- }
- }
- }
- else{
- }
- chdir("../");
- if(!rmdir(dove))
- {
- }
- else
- {
- }
- closedir(apro);
- }
- //Fine canc_dir()
- //By Red Skull 92
Dir Maker By Red Skull 92
