C++ 在文件开头添加数据

C++ 在文件开头添加数据,c++,c,C++,C,可能重复: 如何使用c/c++编程在文件开头添加数据? 我尝试了以下代码: fstream file; stmt.open(L"d:\\xyz.txt",ios::in|ios::out|ios::app); 但这是在文件末尾追加的。您可以这样做: 创建一个新文件 在顶部添加新数据 附加旧文件中的数据 在cstdio中有rename,但我确信也有一些特定于C++的东西。你不能这样做 只有标准C或C++,如果你想原子化,你必须把所有东西写入一个新文件(即新数据加旧文件),然后移动文

可能重复:

如何使用c/c++编程在文件开头添加数据? 我尝试了以下代码:

fstream file;  

stmt.open(L"d:\\xyz.txt",ios::in|ios::out|ios::app);
但这是在文件末尾追加的。

您可以这样做:

  • 创建一个新文件
  • 在顶部添加新数据
  • 附加旧文件中的数据
cstdio
中有
rename
,但我确信也有一些特定于C++的东西。

你不能这样做

只有标准C或C++,如果你想原子化,你必须把所有东西写入一个新文件(即新数据加旧文件),然后移动文件。如果你想冒险,你可以读取一块数据,在开始时写入新内容,然后逐块向上移动数据(但是如果有什么东西打断了你,你就破坏了文件)


如果您可以访问内存映射,您可以尝试另一种方法:内存映射整个文件,
memmove
按所需偏移量将其移动,并
memcpy
将新数据导入初始段。

据我所知,打开文件的唯一选项是读取、写入和附加。因此,您应该读取整个文件内容(前提是它不是一个大文件),打开一个临时文件进行写入,然后写入所需内容,然后再写入从旧文件读取的缓冲区


您也可以尝试在w+模式下打开文件,并尝试将光标定位在文件的开头,但我不知道这是否有效不幸的是

请发布完整的代码,而不仅仅是随机的行(请参阅)。设计您的程序可能更好、更有利,因此这不是必需的,或者在文件的开头已经分配了空间。
ios::app
属性强制将所有写入操作都写到文件的结尾。如果你想从头开始写,你不应该用它。(但正如其他人所指出的,您只能覆盖现有数据或附加到末尾。您不能将数据插入文件。)@AbhijeetRastogi您的意思是什么?