写入文件中间(不覆盖数据)

Tho*_*ini 9 c++ windows winapi

在Windows中,可以通过API写入文件的中间而不会覆盖任何数据而不必在此之后重写所有内容吗?

如果有可能那么我相信它显然会破坏文件; 在它成为一个严重的问题之前我能做多少次?

如果不可能通常采取什么方法/解决方法?使用大(即千兆字节)文件,在插入点之后重写所有内容变得非常快.


注意:我不能避免写到中间.将应用程序视为用于大型文件的文本编辑器,用户在其中键入内容然后保存.我也无法将文件分成几个较小的文件.

pax*_*blo 8

如果你需要的中间结果是一个可以由编辑器以外的其他应用程序使用的平面文件,我不知道有任何方法可以做到这一点.如果要生成平面文件,则必须将其从更改点更新到文件末尾,因为它实际上只是一个顺序文件.

但斜体是有充分理由的.如果您可以控制文件格式,则可以选择一些选项.某些版本的MS Word具有快速保存功能,它们不会重写整个文档,而是将增量记录附加到文件末尾.然后,当重新读取文件时,它按顺序应用所有增量,以便您最终得到的是正确的文件.如果保存的文件必须立即用于另一个不理解文件格式的应用程序,这显然不起作用.

我建议的是不要将文件存储为文本.使用可以有效编辑和保存的中间表单,然后使用一个步骤将其转换为不常用的可用文本文件(例如,在编辑器退出时).这样,用户可以尽可能多地保存,但是耗时的操作不会产生太大的影响.

除此之外,还有其他一些可能性.

内存映射(而不是加载)文件可以提供效率,从而加快速度.你可能仍然需要重写到文件的末尾,但它会发生在操作系统的较低级别.

如果您想要快速保存的主要原因是开始让用户继续工作(而不是让文件可用于其他应用程序),您可以将保存操作转储到单独的线程并立即将控制权返回给用户.然后,您需要在两个线程之间进行同步,以防止用户修改尚未保存到磁盘的数据.