【问题标题】:C Add data to an already open binary fileC 将数据添加到已经打开的二进制文件
【发布时间】:2016-07-05 16:38:51
【问题描述】:

我已经在内存中打开了一个二进制文件,

FILE* fptr = fopen(filename, "wb");

我已经在这个文件中写入了一些数据:

fwrite(fptr, ...);

写入所有数据后,如何在此文件开头添加数据?

【问题讨论】:

  • 据我所知,不存在预置数据的功能,也不知道有多少文件系统支持它。您可以通过编写一个包含您希望添加到前面的数据的新文件来模拟前置,然后在其后复制原始内容。这本质上是文件系统需要做的事情,以便自己预先添加数据。
  • @Mr.Llama:好吧,文件系统不一定必须如此愚蠢,这不是真的——它可以针对这种使用模式进行优化。在集群链的开头添加一个“部分”集群比通过分配的集群转移所有现有数据要便宜得多。想想std::dequestd::vector(在大多数文件系统中,数据已经存储在固定大小的页面中)。
  • 您的意思是“前置”而不是“附加”? (“追加”一词的意思是在末尾添加。)具体来说,您是否尝试在文件的开头插入数据,以便当前位于偏移量 0 的数据将位于偏移量 N(其中 N 是您的字节数插入)?还是要覆盖文件开头的任何现有数据?
  • @KeithThompson 我的意思是前置。经过大量调查,我发现它可能无法完成..

标签: c


【解决方案1】:

我相信没有跨平台的方式这样做......

我的解决方案如下:

  1. 从文件中读取所有数据
  2. 将新数据写入文件
  3. 在末尾附加之前 (1.) 读取的数据

这将导致您想要的结果。如果你只需要一个写操作,你应该先管理内存中的所有数据,然后再将其写入文件...

【讨论】:

    猜你喜欢
    • 2012-02-17
    • 2013-03-13
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多