我目前正试图实现一个功能,删除已保存在二进制文件中的特定结构。我对如何去做有点困惑。我有一个解决方案,但不会特别优雅:我可以将结构的整个文件读取到一个结构向量中,删除旧文件,删除要从该向量中移除的结构,然后保存结构向量作为文件再次。我非常有信心,这将工作,但如果文件很大,这似乎是一个漫长的,也许是不必要的解决方案。我知道如何找到我想要删除的结构,并且我知道如何更改其中的值(通过覆盖它),但我怎样才能删除它?从C++中的二进制文件中删除结构
这是我救我的结构:
std::fstream binary_file(fileLocation.c_str(), std::ios::out | std::ios::binary | std::ios::app);
binary_file.write(reinterpret_cast<char *>(&myStruct), sizeof(myStruct));
binary_file.close();
每个结构都有其独特的ID整数,我用它来寻找合适的结构,像这样:
myStream.open(fileLocation.c_str(), std::ios::in | std::ios::out | std::ios::binary);
while (!myStream.eof())
{
myStream.read(reinterpret_cast<char*>(&myStruct), sizeof(myStruct));
if (myStruct.ID == given_ID)
{
temp_fstream.seekg(-(sizeof(myStruct), std::ios::cur);
//delete struct
return;
}
}
我不知道该怎么办,这甚至有可能吗?我玩弄了将结构标记为无效的想法,所以即使我的程序会读取它,它也不会将它用于任何事情,但再次,似乎是一个可怜的主意。
有什么建议吗?
通常的解决方案是复制,跳过你不想复制的内容。但是你的阅读循环被破坏了;在使用结果之前,您不会验证您的读取是否成功。 (当然,如果你用这种方式写这个文件,几乎可以保证将来有一段时间,你将无法阅读它。) – 2014-10-01 17:20:28