Advertisement
puma7953

Untitled

Nov 26th, 2019
154
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.49 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <sys/stat.h>
  5.  
  6. int split_s(char *argv[], FILE *file_ptr){
  7.     FILE *file_ptr_new;
  8.     char name[100], buffer[100], c;
  9.     int number_of_items_transferred_f, kol = 0;
  10.     number_of_items_transferred_f = atoi(argv[3]) / sizeof(char);   //Определение размера нового
  11.  
  12.     struct stat buf;                                                     //Определение размера исходного файла
  13.     stat(argv[1], &buf);
  14.     long size, number_of_items_transferred = 0;
  15.     size = buf.st_size;
  16.     printf("Source file size: %lu\n", size);
  17.  
  18.     for (int i = 0; ; i++){
  19.         kol = 0;
  20.         strcpy(name, argv[5]);                                  //Создание новых
  21.         itoa(i, buffer, 10);
  22.         strcat(name, buffer);
  23.         strcat(name, ".txt");
  24.  
  25.         file_ptr_new = fopen(name, "wb");
  26.  
  27.         while (number_of_items_transferred < size) {
  28.             if (kol < number_of_items_transferred_f) {
  29.                 c = getc(file_ptr);
  30.                 fputc(c, file_ptr_new);
  31.                 number_of_items_transferred++;
  32.                 kol++;
  33.             }
  34.  
  35.             if (kol == number_of_items_transferred_f) {
  36.                 fclose(file_ptr_new);
  37.                 break;
  38.             }
  39.         }
  40.  
  41.         if (number_of_items_transferred >= size){
  42.             fclose(file_ptr_new);
  43.             return 0;
  44.         }
  45.     }
  46. }
  47.  
  48. int split_n(char *argv[], FILE *file_ptr){
  49.     FILE *file_ptr_new;
  50.     char name[100], buffer[100], c;
  51.     int kol = 0;
  52.  
  53.     struct stat buf;                                             //Определение размера исходного файла
  54.     stat(argv[1], &buf);
  55.     long size, number_of_items_transferred = 0;
  56.     size = buf.st_size;
  57.     printf("Source file size: %lu\n", size);
  58.  
  59.     long new_size = size / atoi(argv[3]);              //Размер новых файлов
  60.     printf("New file size: %lu\n", new_size);
  61.  
  62.     for (int i = 0; ; i++){
  63.         kol = 0;
  64.  
  65.         strcpy(name, argv[5]);                          //Создание нового файла
  66.         itoa(i, buffer, 10);
  67.         strcat(name, buffer);
  68.         strcat(name, ".txt");
  69.         file_ptr_new = fopen(name, "wb");
  70.  
  71.         while (number_of_items_transferred < size) {
  72.  
  73.             if (kol < new_size) {
  74.                 c = getc(file_ptr);
  75.                 fputc(c, file_ptr_new);
  76.                 number_of_items_transferred++;
  77.                 kol++;
  78.             }
  79.  
  80.             if (kol == new_size) {
  81.                 fclose(file_ptr_new);
  82.                 break;
  83.             }
  84.         }
  85.         if (number_of_items_transferred >= size){
  86.             fclose(file_ptr_new);
  87.             return 0;
  88.         }
  89.    }
  90.  
  91. }
  92.  
  93. int main(int argc, char *argv[]) {
  94.  
  95.     FILE *file_ptr = fopen(argv[1], "rb");
  96.  
  97.     if (file_ptr == NULL){
  98.         printf("\nError: file error.");
  99.         return 1;
  100.     }
  101.  
  102.     if (argc < 6){
  103.         printf("\nError: Not all arguments received.");
  104.         fclose(file_ptr);
  105.         return  1;
  106.     }
  107.  
  108.     if ((strcmp(argv[2], "-s") != 0 && strcmp(argv[2], "-n") != 0) || (strcmp(argv[4], "-b") != 0) || atoi(argv[3]) < 0){
  109.         printf("\nError: parameter error.");
  110.         fclose(file_ptr);
  111.         return 1;
  112.     }
  113.  
  114.     if (strcmp (argv[2], "-s")==0)
  115.         split_s(argv, file_ptr);
  116.     if (strcmp (argv[2], "-n")==0)
  117.         split_n(argv, file_ptr);
  118.  
  119.     fclose(file_ptr);
  120.  
  121.     return 0;
  122.  
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement