C++ 在我关闭文件并再次运行以从文件中读取后,我的程序没有从文件中读取什么?

C++ 在我关闭文件并再次运行以从文件中读取后,我的程序没有从文件中读取什么?,c++,file-io,C++,File Io,我已经编写了一个程序,将日期和时间存储在自定义数据类型中,然后将其存储在二进制文件中。如果我在DevC++5.11(快捷方式F11)中编译并运行该程序,一切都会完美运行。只要我不关闭程序,我的程序就可以将数据存储在文件中,然后读取数据。但是,如果我关闭程序,然后再次打开文件进行读取,它只显示我输入的第一天,而不显示其余部分。请告诉我我需要做什么来解决这个问题 这是我的DevC++5.11代码 #包括 #包括 #包括 使用名称空间std; 字符s=''; 结构日期{ 国际日; 弦月; 国际年; }

我已经编写了一个程序,将日期和时间存储在自定义数据类型中,然后将其存储在二进制文件中。如果我在DevC++5.11(快捷方式F11)中编译并运行该程序,一切都会完美运行。只要我不关闭程序,我的程序就可以将数据存储在文件中,然后读取数据。但是,如果我关闭程序,然后再次打开文件进行读取,它只显示我输入的第一天,而不显示其余部分。请告诉我我需要做什么来解决这个问题

这是我的DevC++5.11代码

#包括
#包括
#包括
使用名称空间std;
字符s='';
结构日期{
国际日;
弦月;
国际年;
};
结构时间{
国际人力资源;
int-min;
};
班级报名{
私人:
int-sno;
日期d;
时间t;
公众:
void initsno(){
sno=0;
}
void getdate(){
一天;
cout>d.month;
cout>d.year;
}
void gettime(){
cout t.hr;
cout>t.min;
}   
作废日期(){

cout您的
date
结构包含一个
string
成员。由于字符数据(通常是1)存储在内存中的其他位置,因此不能按原样
write()
/
read()
string

1:不考虑短字符串优化,在这种情况下,少量字符数据实际上直接存储在
String
对象中

使用固定的
char[]
数组而不是
字符串,例如:

#包括
#包括
#包括
使用名称空间std;
结构日期{
国际日;
半个月[10];
国际年;
};
结构时间{
国际人力资源;
int-min;
};
班级报名{
私人:
int-sno;
日期d;
时间t;
公众:
void initsno(){
sno=0;
}
void getdate(){
一天;
一年之内;
}
void gettime(){
cout t.hr;
cout>t.min;
}   
作废日期(){

我的意思是问为什么我的程序没有正确地从文件中读取。你的
日期
结构包含一个
字符串
成员。你不能
write()
/
read()
字符串
原样,因为字符数据存储在内存中的其他位置。你需要序列化字符串(即,保存其
大小()
值后跟其实际字符数据)。否则,请使用固定的
char[]
array。嘿,Remy,谢谢你回复我。我如何序列化字符串?谢谢@RemyLebeau。我想我需要做的是序列化来修复它。我会尝试一下。我非常感谢你的帮助!这非常有效!非常感谢!你能推荐任何类似书籍的资源,让我可以在其中学习文件处理吗C++。因为我不知道序列化和文件处理。我尝试了最上面的一个,因为它对我来说更容易,但是它运行得不正常。在你进入日期之后它就停止了。你能帮我吗?你能解释一下这个代码在结构日期‘`的读取函数中所做的事情吗?如果是(读(RealTytCube(和size),sieof(size))){month.resize(size);is.read(&month[0],size);}''@PratapBiswakarma“我尝试了最上面的一个,因为它对我来说比较容易,但运行不正常”-您的输入看起来像什么?“您能解释一下这段代码在做什么吗?”-a
std::string
是可变长度的,因此该代码在指定字符串长度的字符数据前面写入一个
size\u t
。该代码首先读取长度值,然后将字符串分配到该长度,然后将字符数据读取到分配的内存中。第一个代码在我输入第一次的日期,比如说1。我想知道第二次,你不应该先用字符串的大小初始化size\t size,然后重新解释它吗?应该是什么。read(reinterpret\u cast(&size),sizeof(size))在if语句中返回,这就是它要检查的内容吗?如果没有字符串,它会返回空指针吗?如果文件中存储了字符串,它会返回有效指针吗?