Advertisement
Guest User

Untitled

a guest
Dec 6th, 2019
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.89 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sys/stat.h>
  4. #include <sys/types.h>
  5. #include <fcntl.h>
  6. #include <dirent.h>
  7. #include <string.h>
  8. #include <pthread.h>
  9. #include <linux/unistd.h>
  10.  
  11. /*
  12.     5. Подсчитать суммарный размер файлов в заданном каталоге (аргумент 1 командной строки) и
  13. для каждого его подкаталога отдельно. Вывести на консоль и в файл (аргумент 2 командной строки) название подкаталога,
  14. количество файлов в нём, суммарный размер файлов, имя файла с наибольшим размером.
  15. 5 вариант
  16. */
  17.  
  18. int fd;
  19. FILE *fo;
  20. char dirr[200];
  21. char dirr1[200];
  22.  
  23. int pDir (void *DirName, int MINsize, int MAXsize)
  24.  {
  25.    char STRwrite[200];
  26.     char _DirName[200];
  27.     strcpy(_DirName, (char*)DirName);
  28.     char Name[200];
  29.     int SUMsize=0;
  30.     int count=0;
  31.     char MAXFileName[200];
  32.     strcpy(MAXFileName,"");
  33.     DIR *dir;
  34.     struct dirent *ent;
  35.     struct stat st;
  36.     dir=opendir(_DirName);
  37.     if (dir != NULL)
  38.     {
  39.         while ((ent = readdir(dir)) != NULL)
  40.         {
  41.             strcpy(Name,"");
  42.             strcpy(Name,_DirName);
  43.             strcpy(Name,strcat(Name,"/"));
  44.             strcpy(Name,strcat(Name,ent->d_name));
  45.             lstat(Name,&st);
  46.             if (S_ISREG(st.st_mode))
  47.             {
  48.                 if ((strcmp(ent->d_name,".")!=0) && (strcmp(ent->d_name,"..")!=0))
  49.                 {
  50.                     count++;
  51.                     if (MINsize<=st.st_size<=MAXsize)
  52.                     {
  53.                         fputs(name,fo);
  54.                         fputs(" ",fo);
  55.                         fputs(dir3->d_name,fo);
  56.                         fputs(" ",fo);
  57.                         char size[10000];
  58.                         sprintf(size,"%ld",buf.st_size);
  59.                         fputs(size,fo);
  60.                         fputs("\n",fo);
  61.                         strcpy(MAXFileName,ent->d_name);
  62.                     }
  63.                 }
  64.                
  65.             }  
  66.         }
  67.        
  68.         printf("%s %d %d %s\n", _DirName, count, SUMsize, MAXFileName);    
  69.         if (fd>=0)
  70.         fprintf(pFile,"%s %d %d %s\n", _DirName, count, SUMsize, MAXFileName);     
  71.         closedir(dir);
  72.         dir=opendir(_DirName);
  73.         if (strcmp((char*)DirName,dirr)!=0)
  74.         while ((ent=readdir(dir))!=NULL)
  75.         {
  76.             strcpy(Name,"");
  77.             strcpy(Name,_DirName);
  78.             strcpy(Name,strcat(Name,"/"));
  79.             strcpy(Name,strcat(Name,ent->d_name));
  80.             lstat(Name,&st);
  81.             if (S_ISDIR(st.st_mode)!=0)
  82.                 if ((strcmp(ent->d_name,".")!=0) && (strcmp(ent->d_name,"..")!=0))
  83.                 {
  84.                     pDir(Name);
  85.                 }
  86.         }
  87.     }
  88.     else {
  89.         fprintf(stderr,"%s : Ошибка открытия каталога!!!\n",_DirName);
  90.         //perror("Ошибка открытия каталога!!!");
  91.     }
  92.     return 0;
  93. }
  94.  
  95.  int main(int argc, char *argv[])
  96.  {
  97.     strcpy(dirr, argv[1]);
  98.     strcpy(dirr1, argv[2]);
  99.     char Name[200];
  100.     int result;
  101.     DIR *dir;
  102.     struct dirent *ent;
  103.     struct stat st;  
  104.     int i;
  105.     if (argc<2)
  106.     {
  107.         printf("Введены не все параметры!!!\n");
  108.         exit(1);
  109.     }
  110.     fd=open(argv[2],O_WRONLY | O_CREAT | O_TRUNC, 644);
  111.     if (fd < 0)
  112.     {
  113.         printf("Ошибка открытия файла!!!\n");
  114.         exit(1);
  115.     }
  116.     else
  117.     {
  118.         pFile=fopen(dirr1,"w");
  119.     }
  120.     dir=opendir(argv[1]);
  121.     if (dir != NULL)
  122.     {
  123.         pDir(argv[1]);
  124.         while ((ent = readdir(dir)) != NULL)
  125.         {
  126.             strcpy(Name,"");
  127.             strcpy(Name,argv[1]);
  128.             strcpy(Name,strcat(Name,"/"));
  129.             strcpy(Name,strcat(Name,ent->d_name));
  130.             lstat(Name,&st);
  131.             if (S_ISDIR(st.st_mode)!=0)
  132.             {
  133.                 if ((strcmp(ent->d_name,".")!=0) && (strcmp(ent->d_name,"..")!=0))
  134.                 {
  135.                     pDir(Name);
  136.                 }
  137.             }
  138.         }
  139.         closedir(dir);
  140.      }
  141.      else{
  142.         fprintf(stderr,"%s : Ошибка открытия каталога!!!\n",argv[1]);
  143.         }
  144.     if (close(fd) != 0)
  145.      {
  146.          printf("Ошибка закрытия файла!!!\n");
  147.          exit(1);
  148.      }
  149.     else fclose(pFile);
  150.     return 0;
  151.  }
  152.  
  153. int main( int argc, char* argv[] ){
  154. if (argc!=5){
  155.     printf("Need more argc (dir, min, max, fileName)\n");
  156.     return 1;
  157. }
  158. printf("Selected dir %s\n",argv[1]);
  159. int k=0, total = 0;
  160. int N1 = atoi(argv[2]);
  161. int N2 = atoi(argv[3]);
  162. DIR *dir2;
  163. struct dirent *dir3;
  164. struct stat buf;
  165. FILE * fo;
  166. dir2 = opendir(argv[1]);
  167. if (!dir2){
  168.     printf("Error, check permission\n");
  169.     return 1;
  170. }
  171. fo=fopen(argv[4],"w");
  172. while ( (dir3 = readdir(dir2) ) != NULL ){
  173.     char* name=malloc(strlen(dir3->d_name)+strlen(argv[1])+1);
  174.     strcpy(name,argv[1]);
  175.     strcat(name,"/");
  176.     strcat(name,dir3->d_name);
  177.     stat(name,&buf);
  178.     if ((buf.st_size > N1)&&(buf.st_size<N2)){
  179.         if ((S_ISDIR(buf.st_mode)!=0)&&((strcmp(dir3->d_name,".")!=0)
  180.                 &&(strcmp(dir3->d_name,"..")!=0))){
  181.             printf("DIR  %s\n",name);
  182.         }
  183.         else{
  184.             printf("FILE  %s\n",dir3->d_name);
  185.         }
  186.         fputs(name,fo);
  187.         fputs(" ",fo);
  188.         fputs(dir3->d_name,fo);
  189.         fputs(" ",fo);
  190.         char size[10000];
  191.         sprintf(size,"%ld",buf.st_size);
  192.         fputs(size,fo);
  193.         fputs("\n",fo);
  194.         k++;
  195.     }
  196. }
  197. printf("\nTotal count = %d\n",k);
  198. fclose(fo);
  199. closedir(dir2);
  200. return 0;
  201. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement