Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <sys/stat.h>
- #include <sys/types.h>
- #include <fcntl.h>
- #include <dirent.h>
- #include <string.h>
- #include <pthread.h>
- #include <linux/unistd.h>
- /*
- 5. Подсчитать суммарный размер файлов в заданном каталоге (аргумент 1 командной строки) и
- для каждого его подкаталога отдельно. Вывести на консоль и в файл (аргумент 2 командной строки) название подкаталога,
- количество файлов в нём, суммарный размер файлов, имя файла с наибольшим размером.
- 5 вариант
- */
- int fd;
- FILE *fo;
- char dirr[200];
- char dirr1[200];
- int pDir (void *DirName, int MINsize, int MAXsize)
- {
- char STRwrite[200];
- char _DirName[200];
- strcpy(_DirName, (char*)DirName);
- char Name[200];
- int SUMsize=0;
- int count=0;
- char MAXFileName[200];
- strcpy(MAXFileName,"");
- DIR *dir;
- struct dirent *ent;
- struct stat st;
- dir=opendir(_DirName);
- if (dir != NULL)
- {
- while ((ent = readdir(dir)) != NULL)
- {
- strcpy(Name,"");
- strcpy(Name,_DirName);
- strcpy(Name,strcat(Name,"/"));
- strcpy(Name,strcat(Name,ent->d_name));
- lstat(Name,&st);
- if (S_ISREG(st.st_mode))
- {
- if ((strcmp(ent->d_name,".")!=0) && (strcmp(ent->d_name,"..")!=0))
- {
- count++;
- if (MINsize<=st.st_size<=MAXsize)
- {
- fputs(name,fo);
- fputs(" ",fo);
- fputs(dir3->d_name,fo);
- fputs(" ",fo);
- char size[10000];
- sprintf(size,"%ld",buf.st_size);
- fputs(size,fo);
- fputs("\n",fo);
- strcpy(MAXFileName,ent->d_name);
- }
- }
- }
- }
- printf("%s %d %d %s\n", _DirName, count, SUMsize, MAXFileName);
- if (fd>=0)
- fprintf(pFile,"%s %d %d %s\n", _DirName, count, SUMsize, MAXFileName);
- closedir(dir);
- dir=opendir(_DirName);
- if (strcmp((char*)DirName,dirr)!=0)
- while ((ent=readdir(dir))!=NULL)
- {
- strcpy(Name,"");
- strcpy(Name,_DirName);
- strcpy(Name,strcat(Name,"/"));
- strcpy(Name,strcat(Name,ent->d_name));
- lstat(Name,&st);
- if (S_ISDIR(st.st_mode)!=0)
- if ((strcmp(ent->d_name,".")!=0) && (strcmp(ent->d_name,"..")!=0))
- {
- pDir(Name);
- }
- }
- }
- else {
- fprintf(stderr,"%s : Ошибка открытия каталога!!!\n",_DirName);
- //perror("Ошибка открытия каталога!!!");
- }
- return 0;
- }
- int main(int argc, char *argv[])
- {
- strcpy(dirr, argv[1]);
- strcpy(dirr1, argv[2]);
- char Name[200];
- int result;
- DIR *dir;
- struct dirent *ent;
- struct stat st;
- int i;
- if (argc<2)
- {
- printf("Введены не все параметры!!!\n");
- exit(1);
- }
- fd=open(argv[2],O_WRONLY | O_CREAT | O_TRUNC, 644);
- if (fd < 0)
- {
- printf("Ошибка открытия файла!!!\n");
- exit(1);
- }
- else
- {
- pFile=fopen(dirr1,"w");
- }
- dir=opendir(argv[1]);
- if (dir != NULL)
- {
- pDir(argv[1]);
- while ((ent = readdir(dir)) != NULL)
- {
- strcpy(Name,"");
- strcpy(Name,argv[1]);
- strcpy(Name,strcat(Name,"/"));
- strcpy(Name,strcat(Name,ent->d_name));
- lstat(Name,&st);
- if (S_ISDIR(st.st_mode)!=0)
- {
- if ((strcmp(ent->d_name,".")!=0) && (strcmp(ent->d_name,"..")!=0))
- {
- pDir(Name);
- }
- }
- }
- closedir(dir);
- }
- else{
- fprintf(stderr,"%s : Ошибка открытия каталога!!!\n",argv[1]);
- }
- if (close(fd) != 0)
- {
- printf("Ошибка закрытия файла!!!\n");
- exit(1);
- }
- else fclose(pFile);
- return 0;
- }
- int main( int argc, char* argv[] ){
- if (argc!=5){
- printf("Need more argc (dir, min, max, fileName)\n");
- return 1;
- }
- printf("Selected dir %s\n",argv[1]);
- int k=0, total = 0;
- int N1 = atoi(argv[2]);
- int N2 = atoi(argv[3]);
- DIR *dir2;
- struct dirent *dir3;
- struct stat buf;
- FILE * fo;
- dir2 = opendir(argv[1]);
- if (!dir2){
- printf("Error, check permission\n");
- return 1;
- }
- fo=fopen(argv[4],"w");
- while ( (dir3 = readdir(dir2) ) != NULL ){
- char* name=malloc(strlen(dir3->d_name)+strlen(argv[1])+1);
- strcpy(name,argv[1]);
- strcat(name,"/");
- strcat(name,dir3->d_name);
- stat(name,&buf);
- if ((buf.st_size > N1)&&(buf.st_size<N2)){
- if ((S_ISDIR(buf.st_mode)!=0)&&((strcmp(dir3->d_name,".")!=0)
- &&(strcmp(dir3->d_name,"..")!=0))){
- printf("DIR %s\n",name);
- }
- else{
- printf("FILE %s\n",dir3->d_name);
- }
- fputs(name,fo);
- fputs(" ",fo);
- fputs(dir3->d_name,fo);
- fputs(" ",fo);
- char size[10000];
- sprintf(size,"%ld",buf.st_size);
- fputs(size,fo);
- fputs("\n",fo);
- k++;
- }
- }
- printf("\nTotal count = %d\n",k);
- fclose(fo);
- closedir(dir2);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement