| Uutiset | Koodikirjasto | Wiki | Keskustelut | FAQ | Info |
sweepharja 21.07.04 09:51 Ajaa tietyn komennon kaikissa hakemistoissa
/* Muokkaukset: + lisätty kommentointia - poistettu komentojen outputin redirectaus, määritä se itse komentojonon perään jos et halua kaiutusta */ #include <stdio.h> #include <string.h> #include <stdlib.h> #include <dirent.h> #include <dir.h> #include <sys/stat.h> /* Hassu pyörivä propelli */ void roll(void) { const char *prop = {"|/-\\"}; static int prop_pos=0; if(prop_pos==3) prop_pos=0; printf("\b%c", prop[prop_pos++]); } /* Käy läpi rekursiivisesti koko hakemistopuun */ int sweepdir(char *dirname, char *command) { DIR *dir; struct dirent *ent; struct stat sta; char newdirname[255]={0}, filename[255]={0}; /* Avataan hakemisto */ if((dir=opendir(dirname))==NULL) { fprintf(stderr, "Cannot open directory \"%s\"\n", dirname); return(0); } /* Luetaan hakemiston "entryjä" läpi, ja etsitään mahdolliset alihakemistot */ while((ent=readdir(dir))!=NULL) { sprintf(filename, "%s%s", dirname, ent->d_name); /* Otetaan entryn tiedot */ stat(filename, &sta); /* Onko hakemisto? Jos on, unohda "." ja ".."-hakemistot laskuista */ if((sta.st_mode&S_IFDIR)&&strcmp(ent->d_name, ".")&&strcmp(ent->d_name, "..")) { /* Katenoidaan hakemiston nimi vanhan perään */ sprintf(newdirname, "%s%s\\", dirname, ent->d_name); chdir(newdirname); /* Ajetaan komento */ system(command); chdir(".."); /* Kutsutaan rekursiivisesti tätä funktiota löytyneelle uudelle hakemistolle */ sweepdir(newdirname, command); } } /* Pyöritellään propellia */ roll(); return(1); } int main(int argc, char *argv[]) { int i=0; char command[255]={0}, temp[10]={0}; if(argc<2) { fprintf(stderr, "\tUSAGE: sweep.exe <command-to-execute> arg1...argN of the program\n"); return(1); } /* Luodaan komento katenoimalla siihen kaikki saadut parametrit */ for(i=1;i<argc;i++) { sprintf(temp,"%s ", argv[i]); strcat(command, temp); } printf("This might take a while, so don't reboot or do any quick moves ;-)\n"); printf("Processing... "); if(!sweepdir(".\\", command)) fprintf(stderr, "Something went wrong.. sorry.\n"); else printf("All ok.\n"); printf("Have a nice day.\n"); return(0); } renni 11:22 21.7.04 Koodissa saa olla kommenttejakin, vaikka koodi olisi yksinkertaistakin. Kovakoodattu temppihakemiston sijainti on aika paha kauneusvirhe. harja 15:10 21.7.04 Korjaisin, mutta muokkaustoiminnossa on bugi :-P neon 13:45 22.7.04 mikefast kirjoitti: Korjaisin, mutta muokkaustoiminnossa on bugi :-P Muokkaustoiminnon bugi pitäisi olla korjattu. |
![]() Haku
|