是否可以在c ++中编写新文件而修改文件?

时间:2010-03-27 18:33:10

标签: c++ file

假设我有一个100行的文本文件。我只想改变第50行的内容。

一种方法是打开输入文件并打开一个新文件进行输出。使用for循环逐行读取文件的前半部分并逐行写入第二个文件,然后写下我想要更改的内容,然后再次使用for循环写出后半部分。最后,我重命名新文件以覆盖原始文件。

除此之外还有其他办法吗?一种修改文件中间内容而不触及文件其余部分并且不再写出所有内容的方法?

如果有,那么代码是做什么的?

2 个答案:

答案 0 :(得分:6)

(复制自我对你上一个问题的评论)

嗯,这取决于您使用的I / O库,C标准库,C ++标准库或特定于操作系统的API。但通常有三个步骤。打开文件时,指定写访问权限而不截断,例如fopen(fname,“r +”)。用例如,寻找所需的位置FSEEK。用例如写新字符串fwrite或fprintf。在某些API中,例如Windows OVERLAPPED或Linux aio,您可以说“写入此位置”而无需单独的搜索步骤。

答案 1 :(得分:2)

打开文件,使用fseek跳转到您需要的位置并写入数据,然后关闭文件。

来自http://www.cplusplus.com/reference/clibrary/cstdio/fseek/ ...

#include <stdio.h>

int main ()
{
  FILE * pFile;
  pFile = fopen ( "example.txt" , "r+" );
  fputs ( "This is an apple." , pFile );
  fseek ( pFile , 9 , SEEK_SET );
  fputs ( " sam" , pFile );
  fclose ( pFile );
  return 0;
}