【发布时间】:2018-10-26 07:09:48
【问题描述】:
在 C++ 11 中切断 fstream 文件结尾的最佳方法是什么
我正在编写一个数据持久性类来为我的音频编辑器存储音频。我选择使用 fstream(可能是个坏主意)来创建一个随机访问二进制读写文件。
每次我将一点声音录制到我的文件中时,我都会简单地将其添加到该文件的末尾。另一个内部数据结构/文件,包含指向音频文件的指针并跟踪编辑。
当我撤消录制操作然后执行其他操作时,音频文件的最后一位变得无关紧要。它在文档的当前状态中没有被引用,您无法将自己重做回您可以再次看到它的状态。所以我想把这部分文件剪掉,然后在新的一端开始录制。我不需要剪掉中间的部分,就在最后。
当用户退出时,此文件将保留并在他们再次打开项目时重新加载。
在我的应用程序中,我希望用户一直这样做,并且能够这样做可能会为我节省多达 30% 的文件大小。该文件将很长,可能非常非常长,因此每次发生这种情况时都将其重写到另一个文件不是一个可行的选择。
在用户保存时重写它可能是一种选择,但它仍然没有那么吸引人。
我可以在开头粘贴一个值,说明文件应该多长时间,然后覆盖结尾以回收空间,但与此同时。如果我想在崩溃的情况下不断更新数据存储文件,这意味着我将一遍又一遍地重写开始。我担心这可能对闪存驱动器不利。通过分析指针文件,我还可以在加载时重新计算文件有用部分的结尾,但同时我可能会浪费所有空间,这很复杂。
在 fstream API 中有一个简单的调用吗?
我是否使用了错误的库?请注意,我想坚持使用我喜欢的通用 STL,因此我可以使代码尽可能跨平台。
我似乎无法在文档中找到它,并且已经查找了好几个小时。这不是地球的尽头,但会使它变得更简单,并且可能更有效。也许我只是想念它。
感谢您的帮助 安德烈'
【问题讨论】: