即使在 C++ 中的 fstream.clear() 之后,对象也没有被保存
object is not being saved even after fstream.clear() in c++
我正在使用C++为我的学校项目编写音乐记忆游戏,此处Player对象未保存在PLAYER_DATA中。DAT 文件即使我尝试了 clear(( 函数
这是代码的和平(因为整个代码是600+行(
Player p_dat,plyr;
plyr.getData();
fstream P_file("PLAYER_DATA.DAT",ios::out|ios::in|ios::binary);
while(P_file.read((char*)&p_dat, sizeof(p_dat)))
{
if(nameEqual(plyr,p_dat))
{
P_file.clear();
gotoxy(1,10);
delline();
textcolor(RED);
cout<<"tt EXIXTING PLAYER PROFILE FOUND!n";
int ch = playPanel("It's me", "Change Name");
if(ch == 0)
{
P_file.seekp(P_file.tellg() - sizeof(Player));
GameStarted = 1;
if(c == 1)
Campaign(p_dat,P_file);
else
Endless(p_dat,P_file);
return;
}
else
{
startGame(c);
return;
}
}
}
P_file.clear();
P_file.seekp(0,ios::end);
P_file.write((char*)&plyr,sizeof(plyr));
只是为了简短起见,代码的最后一行没有做任何事情,文件已经存在并且大小为 0kb然而
fstream P_file("PLAYER_DATA.DAT",ios::out|ios::in|ios::binary)
P_file.write((char*)&plyr,sizeof(plyr));
正在保存文件。请帮助我。
编辑 1.1
终于发现这条线有问题
P_file.seekp(0,ios::end);
它适用于代码,即正确保存对象
P_file.clear();
P_file.write((char*)&plyr,sizeof(plyr));
P_file.seekp(0,ios::end);
删除时
P_file.seekp(0,ios::end);
使代码看起来像,
P_file.clear();
P_file.write((char*)&plyr,sizeof(plyr));
在 while 循环之后,不保存文件
再次不保存对象这条线正在制造问题,有没有其他选择或解决方案?
使用所有警告和调试信息进行编译(g++ -Wall -Wextra -g
使用 GCC(,然后使用调试器(例如 gdb
(。
仔细阅读C++ IO 函数的文档。
检查您的文件是否已正确打开;之后:
fstream P_file("PLAYER_DATA.DAT",ios::out|ios::in|ios::binary);
加
if (!P_file) { std::cerr << "failed to open PLAYER_DATA.DAT" << std::endl; };
在某些系统(例如 Linux(上,您可能还会显示strerror(errno)
。
在对write
进行一些中间调用后,考虑使用 flush
。
确保您的程序在正确的工作目录中启动。
在 Linux 上, 你也可以使用 strace(1( 来理解程序完成的系统调用。
最后,您是否考虑使用一些简单的数据库,例如使用sqlite,或者使用一些索引文件,例如使用gdbm?
相关文章:
- 如何将二进制格式的 C++ 对象的 std::vector 保存到磁盘?
- C++17 如何保存泛型可调用对象以供以后使用
- 如何将包含另一个对象向量的对象保存到文件中,并使用C++中的二进制文件从文件中读回?
- 将对象信息保存到二进制文件中
- C++两次从文件保存对象读取多重继承
- 有没有办法自动初始化 std::shared_ptr 来保存有效对象?
- 如何调用返回双精度或字符串并将其保存在地图上但作为对象的类的方法
- 将抽象值对象保存在包装器中和继承的用法中
- 如何保存模板的对象阵列进行文件
- 我的共享内存对象保存在哪里
- 保存对象的攻击函数并稍后称呼它是明确定义的行为
- 如何创建一个动态数组,该数组可以保存从C++中派生的同一基类的所有不同对象
- 即使在 C++ 中的 fstream.clear() 之后,对象也没有被保存
- 如何将所有派生类对象保存在一个容器中
- Visual C++,CMap对象保存到blob列
- 将派生类的对象保存在基 c 的 std::list 中
- 使用 libpng - const 对象保存图像
- 在将图像对象保存到文件 (GDI+) 时获取 Win32Error
- 如何使用weak_ptr构造一个对象,该对象保存对父项的引用
- 将对象保存到二进制文件中的有效方法