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