在C语言中,fopen一个文件 如何能够在写入新的数据覆盖原文件中指定长度的内容

也就是说假如一个文件中存放了内容 abcdefghijk
现在我要写入IJK到文件中
但是我只想让IJK覆盖原来ijk 而不影响前面的abcdefgh

//给个例子吧:
#include <stdio.h>
void main()
{
char* str1="abcdefghijk";
char* str2="IJK";
FILE *pf=fopen("test.txt","w+");
fwrite(str1, 11, 1, pf);//存储abcdefghijk
fseek(pf, 8, 0);//把文件指针移动到离文件开头8字节处(ijk)
fwrite(str2, 3, 1, pf);//一次写入3个字节的数据到文件
fclose(pf);
}

附加:fseek的第三个参数
SEEK_SET: 文件开头 0

SEEK_CUR: 当前位置 1

SEEK_END: 文件结尾 2追问

好吧!不过以w+打开文件,
写入新的数据会将原来的全部数据覆盖掉
当然根据系统的不同,可能有所区别
经过对所有的读写方式测试:
我发现用r+ 方式打开 可以达到我想要的效果。

追答

那你的fwrite是怎么使用的?你贴下代码。fwrite可以限制写入数据的大小的。例如这里:
fwrite(str2, 3, 1, pf);//一次写入3个字节的数据到文件

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-05-31

程序示例

  程序示例1  #include  #include //为了使用exit()  int main()  {  char ch;  FILE* fp;  char fname[50]; //用于存放文件名  printf("输入文件名:");  scanf("%s",fname);  fp=fopen(fname,"r"); //只供读取  if(fp==NULL) //如果失败了  {  printf("错误!");  exit(1); //中止程序  }  //getc()用于在打开文件中获取一个字符  while((ch=getc(fp))!=EOF)  putchar(ch);  fclose(fp); //关闭文件  return 0;  }  注意!初学者往往会犯一个错误,即在输入文件名时不加后缀名,请注意加上!  程序示例2[2]  #include  FILE *stream, *stream2;  int main( void )  {  int numclosed;  // Open for read (will fail if file "crt_fopen.c" does not exist)  if( (stream = fopen( "crt_fopen.c", "r" )) == NULL ) // C4996  // Note: fopen is deprecated; consider using fopen_s instead  printf( "The file 'crt_fopen.c' was not opened\n" );  else  printf( "The file 'crt_fopen.c' was opened\n" );  // Open for write  if( (stream2 = fopen( "data2", "w+" )) == NULL ) // C4996  printf( "The file 'data2' was not opened\n" );  else  printf( "The file 'data2' was opened\n" );  // Close stream if it is not NULL  if( stream)  {  if ( fclose( stream ) )  {  printf( "The file 'crt_fopen.c' was not closed\n" );  }  }  // All other files are closed:  numclosed = _fcloseall( );  printf( "Number of files closed by _fcloseall: %u\n", numclosed );  }  [3]


第2个回答  推荐于2018-05-11
先用fopen("xxx", "r+")打开文件,接着用fread把原先数据读到内存

再判断ijk的位置

然后用fseek定位到文件的位置

最后fwrite写文件本回答被网友采纳
第3个回答  2012-08-01
先用fopen("xxx", "r+")打开文件,
接着用fread把原先数据读到内存

再判断ijk的位置

然后用fseek定位到文件的位置

最后fwrite写文件追问

我现在的文件有好几M ,写入buf 实在是……
还不如另外创建一个文件

本回答被网友采纳
第4个回答  2012-09-25
"r"
Opens for reading. If the file does not exist or cannot be found, the fopen call fails.
"w"
Opens an empty file for writing. If the given file exists, its contents are destroyed.
"a"
Opens for writing at the end of the file (appending) without removing the EOF marker before writing new data to the file; creates the file first if it doesn’t exist.
"r+"
Opens for both reading and writing. (The file must exist.)
"w+"
Opens an empty file for both reading and writing. If the given file exists, its contents are destroyed.
"a+"
Opens for reading and appending; the appending operation includes the removal of the EOF marker before new data is written to the file and the EOF marker is restored after writing is complete; creates the file first if it doesn’t exist.

用a+显然最好 不用判断文件是否存在 写的时候要定位文件位置

fprintf函数输入时是否会覆盖文件中原有内容?
不会影响原文件中的数据\\r\\nfopen( file ,"r+"); \\r\\n"r+" "a+" "w+" 等方式打开为读写模式,这时,写数据前,要先定位文件指针,如果想改动文件中的内容,则写入的数据长度与要覆盖的数据长度要一致才可以,

怎么用C语言对文件操作用特定内容替换其中某些内容
可以使用函数int fseek( FILE *stream, long offset, int origin );来定位你的文件指针。文件指针的位置决定你读写文件的起始位置。其中参数origin :表示从哪里开始偏移,值有:SEEK_SET: 文件开头 SEEK_CUR: 当前位置 SEEK_END: 文件结尾 参数offset:表示偏移的字节数,正数表示正向偏移,负数表示...

c语言编程中怎么实现数据的覆盖!
用读写r+ 或 w+ 方法打开。if((fp=fopen("USER.txt","r+"))==NULL)任何时候想回到文件一开始,就用回绕函数:rewind(fp);这样再写就覆盖了。"a" 打开来 是 从文件尾开始添加新内容。

C语言中fwrite函数输入时会覆盖文件以前的数据吗?
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;(2)size:要写入内容的单字节数;(3)count:要进行写入size字节的数据项的个数;(4)stream:目标文件指针;(5)返回实际写入的数据项个数count。是否覆盖决定于stream FILE *stream=fopen("文件名","mod");其中mod如下:(1)r ...

C语言中 怎样读取一个文本文档中的特定位置的特定长度的字符
1)fopen函数,用于打开文件,返回一个文件指针,fwrite函数,写入文件(也就是你要的result文件),及fclose函数,文件操作完时要关闭文件指针.(2)fseek函数,用于文件指针的定位,也就是将文件指针放到你要操作的文件中的某个位置.(3)然后用的就是fread函数,用于读取一块数据,你可以指定数据的长度,...

C语言中把数据储存在txt文件时,原来txt中的内容被覆盖了。
你fopen函数选择的是参数不对造成的。在C语言中,这个函数的参数由r,w,a,t,b,+六个字符拼成,各字符的含义是:r(read):读 w(write):写 a(append):追加 t(text):文本文件,可省略不写 b(binary):二进制文件 +:读和写 你在参数中肯定没有使用a,所以不是追加,而是从头写入了。

C语言Fopen函数的用法
C语言中的fopen函数是一个强大的工具,用于以特定方式打开文件。其基本调用形式是:`FILE *fp = fopen("文件名", "使用文件方式");`其中,fp是一个指向FILE类型的指针,"文件名"是需要操作的文件的路径,而"使用文件方式"决定了操作类型,如读取、写入、追加或二进制模式。例如,`fp = fopen("...

在C语言中,fwrite,fputs函数对文件的写入是否会覆盖原文件?还是在被读...
这个取决于fopen打开文件时传入的参数如果以追加方式打开,就是写到后面,如果以写方式打开,就是覆盖写,如果把文件指针移动到末尾再写就是写后面

C语言中fread写入的数据时是覆盖原来的数据,还是接在原有数据的后面...
fread是读数据的...向文件写数据时,看是怎么打开的,FILE *fp = fopen(strFileName, "w");这种是覆盖原有数据 FILE *fp = fopen(strFileName, "a");这种是在原有数据后面追加

c语言fwrite 覆盖旧数据
不是的以外包打开会自动把文件以前的内容全部清空,再进行你写的操作,并没有覆盖一说,如果不想覆盖,就用ab追加模式,或者rb读的模式 rb模式不会请数据,这时候写数据才会发生那种数据覆盖的情况

相似回答