Sud*_*ha 4 c++ file-io visual-c++
我需要从选定的点(C++ fstream)中删除文件内容,我应该使用哪个函数?
我写了objects
,我需要objects
在文件中间删除这些
C++没有标准机制来截断给定点的文件.您必须重新创建文件(打开ios::trunc
并写入要保留的内容)或使用特定SetEndOfFile
于操作系统的API调用(在Windows上truncate
或ftruncate
在Unix上).
编辑:删除文件中间的东西是一个非常不稳定的业务.在考虑任何其他替代方案之前,我会尝试使用像SQLite这样的无服务器数据库引擎来存储序列化对象.更好的是,我会按照预期使用SQLite,将这些对象所需的数据存储在适当的模式中.
编辑2:如果问题陈述需要原始文件访问...
作为一般规则,您不会从文件中间删除数据.如果可以将对象序列化为磁盘上的固定大小,则可以将它们作为记录使用,而不是尝试删除数据,而是使用索引文件中的记录的表.例如,如果按顺序写入四个记录,则表格将保留[0, 1, 2, 3]
.要删除第二条记录,只需从表中删除其条目:[0, 2, 3]
.至少有两种方法可以重用表格留下的漏洞:
如果对象无法序列化为固定长度,那么这种方法变得更加困难.可变长度记录管理代码非常复杂.
最后,如果问题陈述要求在磁盘上按顺序保存记录,那么这是一个愚蠢的问题陈述,因为在文件中间插入/删除是非常昂贵的; 没有理智的设计需要这个.