vc 从文件中读取信息到struct中的问题

来源:百度知道 编辑:UC知道 时间:2024/07/01 15:53:47
做一个虹膜识别的程序,定义struct
typedef struct tagCharacterVector
{
long left;
long right;
long top;
long bottom;
long type;
long x;
long y;
}CharacterVector;

typedef struct FileName_Chara
{
CString FileName;
CharacterVector * Chara;

}FileName_Chara;
首先要将文件夹中所有图像的FileName_Chara存到文件中,匹配的时候在从文件中取出到一个FileName_Chara的结构体中,
写入文件:
//写入图片名称
char fileName[8];
strcpy(fileName, strTitle);
Charafile.Write(fileName,sizeof(fileName));

//写入特征长度
char charaLength[4];
CString tempLength;
tempLength.Format("%d" ,cha_len);
strcpy(charaLength, tempLength);
Charafile.Write(charaLength, 4);

//写入特征值
Charafile.Write(FileName_C.Chara, sizeof(CharacterVector)*cha_len);
/*这里是用的另一种方法,还是不行
CArchive ar(&Charafile, CArchive::store);
for(int i = 0; i < cha_len; i++

struct要每个成员逐个写入的, 不能直接写(除非里面全部是char)
要这样写
...
file.Write(a.left, 4);
file.Write(a.right, 4);
...

typedef struct FileName_Chara
{
CString FileName;
CharacterVector * Chara; //这个地方不用指针不行吗?

}FileName_Chara;

这个地方用指针是因为它的数目是不确定的,所以用的指针

如果序列化有困难,建议你用用fprintf和fscanf

记住:对于文件操作,怎么写入的就要使用相应的方式读出来。

个人觉得Serialize使用不妥。

可以考虑:// 将结构体数据写入文件
FILE *pFile;
pFile = fopen("file1.dat","wb");
fwrite(FileName_C.Chara,sizeof(CharacterVector ),1,pFile);

读取时//从文件中读出结构体数据
fread(FileName_C.Chara, sizeof(s_b), 1, pFile);

是指针,就不用&符号,否则在用地址符&