我正在尝试编写一个程序,当程序正在执行一个操作时 (例如:搜索、更新或添加),应该是直接访问。该程序 不应顺序读取所有记录以达到记录。
#include <iostream>
#include <fstream>
#include <string>
using namespace std;
struct Student{
int Id;
int Money;
int Age;
char name[15];
};
void main(){
Student buffer;
ofstream BinaryFile("student", ios::binary);
ifstream WorkerText("worker.txt");
//-------------------------------------------------------------------------------------------------------------
while( WorkerText.good() ){
WorkerText>> buffer.Age >> buffer.name >> buffer.name >> buffer.name;
BinaryFile.write( (char *) &buffer, sizeof(Student) );
}
BinaryFile.close();
//-------------------------------------------------------------------------------------------------------------
ifstream ReadBinary( "student", ios::binary | ios::out );
while( BinaryFile.good() ){
ReadBinary.read((char*)&buffer,sizeof(Student));
cout<<buffer.Age;
}
//-------------------------------------------------------------------------------------------------------------
system("pause");
}
我卡在这里我无法按顺序阅读我该如何解决这个问题
最佳答案
如果文件包含相同大小的结构,或者使用一些索引表,则可以跳过顺序读取。
对于相同大小的结构的情况:
void ReadStudent(istream &src, Student &dst)
{
src.read(&dst, sizeof(dst));
}
void GoToStudentIndex(istream &src, size_t idx)
{
src.seekg(idx * sizeof(Student), is.beg);
}
上述函数假定您正在按如下方式写入数据:
void WriteStudent(ostream &dst, const Student &src)
{
dst.write(&src, sizeof(src));
}
关于c++ - 从 C++ 中的二进制文件顺序读取结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15452311/