将文件写入和读取到结构中
Writing & reading in&from a file into a structure
如果我写入文件,雇员13和26(以及后来的其他人)总是有错误的ID2/ID3。(见输出)
我做错了什么?
感谢您事先的建议。
typedef struct Employee
{
char name[128];
int ID1;
int ID2;
int ID3;
}employee;
void __fastcall TMainForm::LogHeader(char* filename)
{
char cBuffer[2048]={0};
FILE *pFile;
int n = 0;
Employee header;
if(FileExists(filename)){
pFile = fopen(filename,"r");
fread(&header,sizeof(struct Employee),1,pFile);
fclose(pFile);
}
memset(cBuffer,sizeof(cBuffer),0);
n = 0;
n+= sprintf(cBuffer+n,"%st",header.name);
n+= sprintf(cBuffer+n,"ID1: %dt",header.ID1);
n+= sprintf(cBuffer+n,"ID2: %dt",header.ID2);
n+= sprintf(cBuffer+n,"ID3: %dt",header.ID3);
log(cBuffer);
}
void __fastcall TMainForm::Save3Click(TObject *Sender)
{
FILE *pFile;
int iWritten = 0;
Employee header;
char fn[MAX_PATH]={0};
__int16 *mesauredValues;
header.ID1 = 1280;
mesauredValues = new __int16[header.ID1];
for(int i = 1;i<32;i++){
setmem(header.name,sizeof(header.name),0);
sprintf(header.name,"employee number: %.2d",i);
header.ID2= i;
header.ID3= i;
sprintf(fn,"D:\temp\Testfile_%.4d.dat",i);
for(int j = 0;j<header.ID1;j++){mesauredValues[j] = j;}
pFile = fopen(fn,"wb");
assert(pFile != NULL);
iWritten = fwrite(&header,sizeof(struct Employee),1,pFile);
iWritten += fwrite(mesauredValues,sizeof(__int16),header.ID1,pFile);
fclose(pFile);
LogHeader(fn);
}
delete mesauredValues; mesauredValues = NULL;
}
//--------------------- output:
employee number: 01 ID1: 1280 ID2: 1 ID3: 1
employee number: 02 ID1: 1280 ID2: 2 ID3: 2
employee number: 03 ID1: 1280 ID2: 3 ID3: 3
employee number: 04 ID1: 1280 ID2: 4 ID3: 4
employee number: 05 ID1: 1280 ID2: 5 ID3: 5
employee number: 06 ID1: 1280 ID2: 6 ID3: 6
employee number: 07 ID1: 1280 ID2: 7 ID3: 7
employee number: 08 ID1: 1280 ID2: 8 ID3: 8
employee number: 09 ID1: 1280 ID2: 9 ID3: 9
employee number: 10 ID1: 1280 ID2: 10 ID3: 10
employee number: 11 ID1: 1280 ID2: 11 ID3: 11
employee number: 12 ID1: 1280 ID2: 12 ID3: 12
employee number: 13 ID1: 1280 ID2: 0 ID3: 0
employee number: 14 ID1: 1280 ID2: 14 ID3: 14
employee number: 15 ID1: 1280 ID2: 15 ID3: 15
employee number: 16 ID1: 1280 ID2: 16 ID3: 16
employee number: 17 ID1: 1280 ID2: 17 ID3: 17
employee number: 18 ID1: 1280 ID2: 18 ID3: 18
employee number: 19 ID1: 1280 ID2: 19 ID3: 19
employee number: 20 ID1: 1280 ID2: 20 ID3: 20
employee number: 21 ID1: 1280 ID2: 21 ID3: 21
employee number: 22 ID1: 1280 ID2: 22 ID3: 22
employee number: 23 ID1: 1280 ID2: 23 ID3: 23
employee number: 24 ID1: 1280 ID2: 24 ID3: 24
employee number: 25 ID1: 1280 ID2: 25 ID3: 25
employee number: 26 ID1: 1280 ID2: 2089983994 ID3: 0
employee number: 27 ID1: 1280 ID2: 27 ID3: 27
employee number: 28 ID1: 1280 ID2: 28 ID3: 28
以"rb"answers"wb"打开,这看起来像CTRL-Z (ASCII 26)被解释为文件结束
相关文章:
- C++将文本文件中的数据读取到结构数组中
- 将内部带有矢量的结构保存/读取到二进制文件中
- 从 XML 中读取未指定结构的每个数据成员
- 如何读取没有数组或结构的 3 列文件
- 将结构向量保存到文件中,并从C++文件中读取结构向量
- 嵌套结构,从由空行分隔的文件中读取数据
- C++,从文件读取到结构,然后读取到向量(结构被推入向量太多次,而不仅仅是一次)
- 从只读内存中读取结构
- 为什么不读取带有指针的结构?
- 如何读取文件并将该文件分类为不同类型的数据,这些数据都存储在结构中的特定数组中
- 从文本文件中读取并输入到数组结构中,然后显示读取的数据C++
- 将文本文件读取到数组结构中
- 如何读取/查询文件系统和文件结构
- 从包含 IP 标头片段的二进制文件中读取结构的最佳方法是什么
- 使用结构读取和写入二进制文件
- 使用文件和结构读取数据并输出数据
- 使用结构 c++ 读取压缩文件 Gzread
- 结构读取C++
- 在 c++ 中使用消息结构读取/填充数据缓冲区的正确方法是什么?
- 将包含字符串属性的结构读取/写入二进制文件