Работа с бинарным файлом - 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);
}

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

  1. Включаются необходимые заголовочные файлы.
  2. Определяется функция, открывающая файл с заданным именем и режимом работы.
  3. Если файл не удалось открыть, выводится сообщение об ошибке и программа завершается.
  4. Определяется функция, печатающая содержимое файла в шестнадцатеричной системе счисления.
  5. В функции fill() файл записывается последовательностью байтов от 0 до 15.
  6. В функции change() производится поиск позиции 3 в файле и замена двух байтов на значение 0xDE, 0xAD, 0xBE, 0xEF.
  7. В функции main() создается файл с именем file.dat, заполняется данными, печатается его содержимое, затем изменяется и снова печатается.

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

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