C语言对文件的数据写入的方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言对文件的数据写入的方法相关的知识,希望对你有一定的参考价值。

使用fputs和fputc语句对文件进行写入,程序能执行,没有报错。写入文件也生成了,但就是文件里边没有任何数据。是哪里出错了?求大神指点。代码如下:
# include <stdio.h>
# include <stdlib.h>

int main ()

FILE *fp;

fp=fopen("e:\\文件读写.txt","w");

if((fp=fopen("e:\\文件读写.txt","r"))==NULL)//注意不要将==写成=号,文件的路径是“磁盘:\\文件夹\\文件名.格式”

printf("无法打开“文件读写.txt”\n");
exit(1);

else
printf("文件已成功打开,可以写入数据了。\n");

fputc('H',fp);
fputs(" Hello World",fp);

fclose(fp);

return 0;

参考技术A 将if((fp=fopen("e:\\文件读写.txt","r"))==NULL)中的判断条件改成 if(fp==NULL)就行,因为你前面已经定义了fp=fopen("e:\\文件读写.txt","w");是以写方式打开文件,所以再判断中无需再添加以读方式打开文件了,这样就不会空了。

# include <stdio.h>
# include <stdlib.h>

int main ()

FILE *fp;

fp=fopen("e:\\文件读写.txt","w");

if(fp==NULL) //注意不要将==写成=号,文件的路径是“磁盘:\\文件夹\\文件名.格式”

printf("无法打开“文件读写.txt”\n");
exit(1);

else
printf("文件已成功打开,可以写入数据了。\n");

fputc('H',fp);
fputs(" Hello World",fp);

fclose(fp);

return 0;
本回答被提问者采纳
参考技术B if((fp=fopen("e:\\文件读写.txt","r"))==NULL)//注意不要将==写成=号,文件的路径是“磁盘:\\文件夹\\文件名.格式”

printf("无法打开“文件读写.txt”\n");
exit(1);

else
printf("文件已成功打开,可以写入数据了。\n");
删掉

在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个字节的数据到文件

参考技术A

程序示例

  程序示例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]


参考技术B 先用fopen("xxx", "r+")打开文件,接着用fread把原先数据读到内存

再判断ijk的位置

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

最后fwrite写文件
参考技术C 先用fopen("xxx", "r+")打开文件,
接着用fread把原先数据读到内存

再判断ijk的位置

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

最后fwrite写文件追问

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

参考技术D "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+显然最好 不用判断文件是否存在 写的时候要定位文件位置

以上是关于C语言对文件的数据写入的方法的主要内容,如果未能解决你的问题,请参考以下文章

C语言对结构体文件的读取

C语言二进制流写入文件

c语言文件读写

c语言中如何修改储存在文件的结构体内容中。小文件

C语言将数据写入文件,读取出现二次读取

C语言从一个文件读数据到写入另一个文件