【发布时间】:2017-06-20 14:08:07
【问题描述】:
我正在尝试创建一个随机访问文件。首先,我创建一个文件“book_data.txt”并写入大约 10000 个空白 BookType,然后我想清除一些 BookType 并按 ID 存储到文件中,但是这段代码可能会覆盖旧文件中的所有数据,并且每个文件中只存储一个对象我调用 saveData() 的时间。请给出解决方案。
void BookType::saveData()
{
std::ofstream bookFout("book_data.txt",std::ios::out | std::ios::binary);
bookFout.seekp((getBookID() - 1) * sizeof(BookType));
bookFout.write(reinterpret_cast<char*>(this), sizeof(BookType));
bookFout.close();
}
感谢您的帮助。
【问题讨论】:
-
我试过了,但是没有效果
-
我认为问题出在您打开文件的方式上检查this 它可能会有所帮助...尝试更改为:
std::ofstream bookFout("book_data.txt",std::ios::app | std::ios::binary); -
顺便说一句,在输出流上查找文件末尾是未定义的行为。某些平台可能会填充,其他平台可能会引发异常或使您的硬盘崩溃。
-
显示BookType的定义