Работа с бинарным файлом - 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, заполняется данными, печатается его содержимое, затем изменяется и снова печатается.