29.10.2006, 18:53
общий
это ответ
Здравствуйте, Евсеев В. Н.!
Чтобы программа поняла, что файл - нужного типа,
можно в начале файла задавать некоторый "уникальный идентификатор",
как это в большинстве случаев и делается.
Например четыре символа: "DWTR" (dynamic matrix).
Чтобы хранить матрицы разных размерностей, после
идентификатора можно задавать размер по x и по y,
то есть два раза по четырехбайтовому числу.
Это все - заголовок файла, дальше - непосредственно данные матрицы.
Замечание.
Можно сразу условиться, какого типа будут элементы матрицы.
Например, int (четыре байта). Тогда никаких проблем.
Если же предусматривать, что тип элементов может быть разный,
то эту информацию тоже следует сохранять в заголовке файла.
Например, указывать размерность элемента в байтах и
тип элемента (вещественный/целый/беззнаковый целый).
Вот пример функций для загрузки и сохранения матрицы:
Приложение:
#include <stdio.h>#include <string.h>#include <conio.h>bool MLoadFromFile(char *FileName, int *Width, int *Height, int *Matrix){ FILE *f; f = fopen(FileName, "rb"); // именно "rb", т.к. открываем бинарный файл if(f==NULL) return false; char ID[5]; fread(ID,4,1,f); if(strncmpi(ID,"DWTR",4))// если идентификатор не совпадает { fclose(f); return false; } if( fread(Width,4,1,f)!=1 || fread(Height,4,1,f)!=1 || fread(Matrix,(*Width)*(*Height),4,f)!=4) { fclose(f); return false; } fclose(f); return true;}bool MSaveToFile(char *FileName, int Width, int Height, int *Matrix){ FILE *f; f = fopen(FileName, "wb"); if(f==NULL) return false; char ID[5]="DWTR"; fwrite(ID,4,1,f); fwrite(&Width,4,1,f); fwrite(&Height,4,1,f); fwrite(Matrix,Width*Height,4,f); fclose(f); return true;}