Довести размер указанного файла до заданной длины - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Программе задаются: имя существующего текстового файла; требуемая новая длина в байтах; символ, которым необходимо осуществить заполнение. Программа должна доводить размер указанного файла до заданной длины, если новая длина превышает уже имеющуюся длину файла, дописывая в конец файла необходимое кол-во заданных символов.

Решение задачи: «Довести размер указанного файла до заданной длины»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
#define SIZE 120
 
int main(void)
{
    printf("Enter file name: ");
    
    char fn[SIZE], c, g;
    FILE *file;
    unsigned long fs, byte_size, need_size;
    int i;
    
    gets(fn);
    
    /* Проверим существует ли файл: попытка открытия в режиме только чтение*/
    if ((file = fopen(fn, "r")) == NULL) {
    fprintf(stderr, "File \"%s\" doesn't exist\n", fn);
    exit(1);
    }
    fclose(file);
    
    /* Попытка открытия файла в режиме append(добавить) */
    if ((file = fopen(fn, "a")) == NULL) {
    fprintf(stderr, "Error: couldn't write file %s\n", fn);
    exit(1);
    }
    
    fs = ftell(file); // просмотр количество байтов в файле
    printf("Size of file \"%s\" contains %lu bytes\n", fn, fs);
    printf("What size do you want? ");
    scanf("%d", &byte_size);
    /* Так как после вызова функции scanf() в поток переходит символ конца строки,
       чтобы его отчистить создадим "замыкание"*/
    while ((g = getc(stdin)) != EOF && g != '\n')
    ;
    
    /* Проверка, является ли тикущий размер больше желаемого
       и не является ли желаемый развмер через-чур большим */
    if (byte_size < fs && byte_size < 32767) {
    printf("Error: desired size less then file have or too lage\n");
    exit(1);
    }
    
    printf("What symbol you want? <symbol>: ");
    c = getc(stdin);
    
    need_size = byte_size - fs;
    while (need_size--)  // пока need_size > 0
    fputc(c, file);
    
    fclose(file); // закрытия потока файла
    
    return 0;
}

Объяснение кода листинга программы

  1. Объявление переменных:
    • fn типа char массив размером SIZE для хранения имени файла;
    • c типа char для хранения символа заполнения;
    • g типа char для временного хранения символа конца строки;
    • file указатель на файл;
    • fs типа unsigned long для хранения количества байт в файле;
    • byte_size типа int для хранения желаемого размера файла;
    • need_size типа int для хранения количества байт, которые нужно добавить в файл.
  2. Ввод имени файла с помощью функции gets().
  3. Проверка существования файла с помощью функции fopen() в режиме чтения и вывода сообщения об ошибке в случае неудачи.
  4. Проверка возможности открытия файла в режиме append с помощью функции fopen() и сообщения об ошибке в случае неудачи.
  5. Определение текущего размера файла с помощью функции ftell().
  6. Вывод текущего размера файла.
  7. Ввод желаемого размера файла с помощью функции scanf().
  8. Очистка потока ввода от символа конца строки с помощью цикла while и функции getc().
  9. Проверка на соответствие введенного размера ограничениям (не меньше текущего размера файла и не больше 32767).
  10. Ввод символа заполнения с помощью функции getc().
  11. Расчет количества байт, которые нужно добавить в файл с помощью вычитания текущего размера файла из желаемого.
  12. Добавление символа заполнения в файл с помощью цикла while и функции fputc().
  13. Закрытие файла с помощью функции fclose().
  14. Завершение программы с возвратом 0.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.273 из 5
Похожие ответы