Довести размер указанного файла до заданной длины - 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; }
Объяснение кода листинга программы
- Объявление переменных:
- fn типа char массив размером SIZE для хранения имени файла;
- c типа char для хранения символа заполнения;
- g типа char для временного хранения символа конца строки;
- file указатель на файл;
- fs типа unsigned long для хранения количества байт в файле;
- byte_size типа int для хранения желаемого размера файла;
- need_size типа int для хранения количества байт, которые нужно добавить в файл.
- Ввод имени файла с помощью функции gets().
- Проверка существования файла с помощью функции fopen() в режиме чтения и вывода сообщения об ошибке в случае неудачи.
- Проверка возможности открытия файла в режиме append с помощью функции fopen() и сообщения об ошибке в случае неудачи.
- Определение текущего размера файла с помощью функции ftell().
- Вывод текущего размера файла.
- Ввод желаемого размера файла с помощью функции scanf().
- Очистка потока ввода от символа конца строки с помощью цикла while и функции getc().
- Проверка на соответствие введенного размера ограничениям (не меньше текущего размера файла и не больше 32767).
- Ввод символа заполнения с помощью функции getc().
- Расчет количества байт, которые нужно добавить в файл с помощью вычитания текущего размера файла из желаемого.
- Добавление символа заполнения в файл с помощью цикла while и функции fputc().
- Закрытие файла с помощью функции fclose().
- Завершение программы с возвратом 0.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д