Работа с бинарным файлом - C (СИ)
Формулировка задачи:
подскажите пожалуйста как перезаписать определенную область в бинарном файле. именно конкретный участок
Решение задачи: «Работа с бинарным файлом»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> FILE *open_file(const char *name, const char *mode) { FILE *f = fopen(name, mode); if (!f) { printf("Cannot open file '%s'\n", name); exit(1); } } void print_file(const char *name) { FILE *f = open_file(name, "rb"); int c; while ( (c = fgetc(f)) != EOF ) { printf("%2X ", c); } puts(""); fclose(f); } void fill(const char *name) { FILE *f = open_file(name, "wb"); for (int i=0; i<16; i++) fputc(i, f); fclose(f); } void change(const char *name) { FILE *f = open_file(name, "r+b"); fseek(f, 3, SEEK_SET); const char s[] = { 0xDE, 0xAD, 0xBE, 0xEF}; fwrite(s, 1, 2, f); fseek(f, 1, SEEK_CUR); fwrite(s+2, 1, 2, f); fclose(f); } int main() { const char *name = "file.dat"; fill(name); printf("Original: "); print_file(name); printf("Modified: "); change(name); print_file(name); }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы.
- Определяется функция, открывающая файл с заданным именем и режимом работы.
- Если файл не удалось открыть, выводится сообщение об ошибке и программа завершается.
- Определяется функция, печатающая содержимое файла в шестнадцатеричной системе счисления.
- В функции fill() файл записывается последовательностью байтов от 0 до 15.
- В функции change() производится поиск позиции 3 в файле и замена двух байтов на значение 0xDE, 0xAD, 0xBE, 0xEF.
- В функции main() создается файл с именем
file.dat
, заполняется данными, печатается его содержимое, затем изменяется и снова печатается.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д