我有一个文件'quizzes.dat'
,在记事本中打开时看起来像这样:
"Bart Simpson K A F Ralph Wiggum # < , Lisa Simpson d b [ Martin Prince c b c Milhouse Van Houten P W O "
全部在一条线上。
我想获取这个二进制文件并使用函数输出一个可读的文本fstream
文件read/ write
。
到目前为止,我的代码相当简单:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
bool openInFile (ifstream &, char []);
bool openOutFile (ofstream &, char []);
struct student
{
char name[25];
int exam1;
int exam2;
int exam3;
};
student bclass[5];
int main()
{
ifstream input;
openInFile (input, "quizzes.dat");
ofstream output;
openOutFile (output, "quizzes.txt");
output << "=================================================\n";
while (!input.eof())
{
for (int i = 0; i < 5; i++)
{
input.read((char*)&bclass[i], sizeof(bclass[i]));
output << bclass[i].name << ", " << bclass[i].exam1 << ", "
<< bclass[i].exam2 << ", " << bclass[i].exam3 << endl;
}
}
output << "=================================================\n";
input.close();
output.close();
return 0;
}
// Opens and checks input file
bool openInFile (ifstream &in, char filename[])
{
in.open(filename, ios::in | ios::binary);
if (in.fail())
{
cout << "ERROR: Cannot open quizzes.dat\n";
exit(0);
}
return in.fail();
}
// Opens and checks output file
bool openOutFile (ofstream &out, char filename[])
{
out.open(filename, ios::out);
if (out.fail())
{
cout << "ERROR: Cannot open quizzes.txt\n";
exit(0);
}
return out.fail();
}
首先,这是读取二进制文件的最佳方式吗?或者做一个不是一个好array
主意struct
?有人告诉我,二进制文件遵循 的模式struct
,一个 25 个字符的名称和 3 个 int 测验成绩,共有 5 个学生。
最后,我在文本文件中得到的输出是:
=================================================
巴特辛普森, 16640, 17920, 1818317312
ph 威格姆, 2883584, 1766588416, 1394631027
英普森, 1291845632, 1769239137, 1917853806
因斯, 1751935309, 1702065519, 1851872800
豪顿, 0, 0, 0
=================================================
什么时候应该看起来像:
=================================================
巴特辛普森, 75, 65, 70
拉尔夫·维格姆,35、60、44 岁
丽莎辛普森,100 岁、98 岁、91 岁
马丁普林斯, 99, 98, 99
米尔豪斯·范豪顿,80、87、79
=================================================
在记事本中分析 dat 文件时,我看到每个名称都分配了 25 个空格,并且不可读的部分每个都有 4 个空格,我假设它们与整数类型的 4 个字节相关。
我的问题是如何将该数据转换为可读的文本格式,如果数据似乎遵循与我的结构完全相同的模式,为什么名称会被截断?请帮忙!