【发布时间】:2019-04-21 02:01:27
【问题描述】:
我的代码在下面。
int main() {
Employee* employee = new Employee();
cout << "Creating File..." << endl;
fstream file("deneme1.txt",ios::out|ios::binary|ios::ate);
for(int i=0;i<10;i++){
if(i<4){
string name;
float salary;
int yearHired;
cout<<"Enter Name: ";
cin>>name;
cout<<"Enter Salary: ";
cin>>salary;
cout<<"Enter Year Hired: ";
cin>>yearHired;
employee->set_id(i);
employee->set_name(name);
employee->set_salary(salary);
employee->set_yearHired(yearHired);
file.write((char*)&employee,sizeof(employee));
file.close();
}
}
file.open("deneme1.txt",ios::in|ios::out|ios::binary);
file.seekg(0);
while((file.read((char*)&employee,sizeof(employee)))) {
cout << employee->get_id();
}
}
我有一个名为“deneme1.txt”的二进制文件。我将四个对象记录到“deneme1.txt”。我想在while 循环中获取所有“deneme1.txt”行,但我只能得到最后一行。(所以输出是
“正在创建文件...
3"
)
如何获取文件中的所有行?也许文件只有一个对象?
下面是我的班级
class Employee
{
private:
string name;
int id;
float salary;
int yearHired;
public:
void set_name(string n)
{
this->name = n;
}
void set_id(int i)
{
this->id = i;
}
string get_name()
{
return name;
}
int get_id()
{
return id;
}
void set_salary(float s)
{
this->salary = s;
}
float get_salary()
{
return salary;
}
void set_yearHired(int y)
{
this->yearHired = y;
}
int get_yearHired()
{
return yearHired;
}
};
我希望输出为“0 1 2 3”
【问题讨论】:
-
二进制文件行??如何在二进制文件中定义 line ?请注意解释。
-
显示您的班级标题。如果
name是 std::string 你不能这样做。 -
我的二进制文件名为“deneme1.txt” 通常二进制文件没有
.txt扩展名。 -
@BatuhanÖzkan -- 这些代码都不起作用,所以问“为什么我不能用 id 做 x”是无效的。如果要证明,
sizeof(Employee)等于什么?不管name给你的size()是什么,它都是一样的。那么如果name是 1,000 个字符,这应该如何工作? -
我该如何解决这个问题? -- 你的文件的布局是什么?换句话说,另一个应用程序如何能够读取您的文件并从文件中重新创建员工?这是您应该弄清楚的第一步——它与编码无关。一旦你知道了这一点,那么它是二进制文件、文本文件等都没有关系。简而言之,这就是对象序列化——谷歌就可以了。