我目前正試圖實現一個功能,刪除已保存在二進制文件中的特定結構。我對如何去做有點困惑。我有一個解決方案,但不會特別優雅:我可以將結構的整個文件讀取到一個結構向量中,刪除舊文件,刪除要從該向量中移除的結構,然後保存結構向量作爲文件再次。我非常有信心,這將工作,但如果文件很大,這似乎是一個漫長的,也許是不必要的解決方案。我知道如何找到我想要刪除的結構,並且我知道如何更改其中的值(通過覆蓋它),但我怎樣才能刪除它?從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