写入文件的四种方式,三种字符数据,一种二进制数据

本文详细介绍了使用 C 语言进行文件写入的多种方法,包括字符方式、格式化方式及字符串方式等,并探讨了二进制数据的写入特点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字符方法一:

/*字符方式就是以字符为单位,一个字符一个字符地将数据写入到文件中,用的fputc()函数

int putc(char c,FILE *stream);
参数C是指代的一个将被写入文件中的字符
参数stream是一个文件指针,并且此指针已经指向了要被写入字符的文件
如果字符写入成功,函数返回写入的字符的ASCII码值,写入失败,返回-1
*/ 
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE *fp;
fp=fopen("D:\\Test.txt","a+");
if(fp==NULL)
{
puts("打开文件失败!\n\n");
exit(0);
}
puts("打开文件成功!\n\n");
puts("请输入你要写入文件的数据:");
char ch;
int i=0;
ch =getchar();
while(ch!='\n') 
{
i=fputc(ch,fp);
if(i==-1)
{
printf("写入文件失败!");
break;

}
ch=getchar();
}
int return_value=fclose(fp);
if(return_value!=0)
{
puts("关闭文件失败!\n");
exit(0);
}
puts("关闭文件成功!\n");

}


字符方法二:

/*格式化方式写入数据,用的stdio.h提供的fprintf函数
int fprintf(FILE *stream,const *format[ , argument,]...);
stream 是指向将被写入数据的文件的文件指针,format是格式化的字符串
argument参数是可选的,如果format有格式字符,argument就是对应的变量
fprintf()返回的是实际输入到文件中的字符个数
*/ 
#include<stdio.h>
#include<stdlib.h>
struct info{
int no;
char name[10];
char sex[6];
};
int main()
{
struct info info_st[3]={
   {1,"仲军","男"},
   {2,"谢意","女"},
   {3,"傅腾","女"} 
   };
FILE *fp;
int i;
fp=fopen("D:\\Test1.txt","w+");
if(fp==NULL)
{
puts("打开文件失败!\n\n");
exit(0);
}
puts("打开文件成功!\n\n");
int count=0;//统计下fprintf返回的字符个数,也是验证下这个函数返回的啥 
for( i=0;i<3;i++)
{
count+=fprintf(fp,"NO = %d\t Name=%s  sex=%3s\n",info_st[i].no,info_st[i].name,info_st[i].sex);

}
printf("记录到文件中的字符个数是:%d\n\n",count);
int return_value=fclose(fp);
if(return_value!=0)
{
printf("关闭文件失败!\n");
exit(0);
    }
puts("关闭文件成功!\n") ;
return 0;

}

字符方法三:

/*字符串方式 
一次向文件写入字符串,用的fputs函数,
int fputs(const char *str,FILE *stream);
str是指向要写入文件的字符串的指针,stream是将被写入字符串的文件的文件指针
如果字符串写入失败的话,返回-1 */
#include<stdio.h>
#include<stdlib.h>
int main()
{
FILE*fp;
fp=fopen("D:\\Test.txt","w");
if(fp==NULL)
{
puts("打开文件失败!\n\n");
exit(0);
}
puts("打开文件成功!");
puts("你要输入的字符串:\n");
char c[10];
gets(c);
int value_w=fputs(c,fp);
if(value_w==-1)//fputs写入失败返回-1 
{
puts("写入字符串失败!\n");
exit(0);

puts("写入字符串成功!\n");
int return_value=fclose(fp);
if(return_value!=0)//文件成功关闭返回0 
{
puts("文件关闭失败!");
exit(0);
  
}
puts("文件关闭成功!");
return 0;
}



二进制数据格式:

/* 以二进制方式写入数据
int fwrite(const void *buffer,int size,int count,FILE *stream);
buffer是一个五类型的指针,指向将要写入文件的数据。
size是要被写入到文件的数据的大小
count是size为单元的单元的个数
stream是文件指针,指向要被写入数据的文件
函数返回实际写入到文件的单元个数,从函数的参数
stream是文件指针,指向将要被写入数据的文件
函数返回实际写入到文件的单元个数,从函数的参数来看,说明函数处理的字符数据是结果和数组
*/
#include<stdio.h>
#include<stdlib.h>
struct info{
int i;
char name[10];
char sex[6];
};
int main()
{
struct info info_st[3]={
{1,"谢意","男"},{2,"仲军","男"},
{3,"傅腾","女"}
};
  FILE *fp;
  fp=fopen("D:\\Test1.txt","w+");
  if(fp==NULL)
  {
  puts("打开文件失败!\n\n");
  exit(0);
}
puts("打开文件成功:\n");
int count=fwrite(info_st,sizeof(struct info),3,fp);//写入数据到文件
printf("写入到文件的的单元数是: %d\n\n",count);
int return_value=fclose(fp);
if(return_value!=0)
{
puts("关闭文件失败");
exit(0);

}
  puts("关闭文件成功\n");
  return 0;

}


可以看到这里二进制写入有问题,这里字符写入是正确的,但是数字写入不正确,其实这里不正确就是对我们不可读,对程序自己,它是可读的,它是可以用的,当我们去用二进制方式去读取的时候,数字是可以显示的,但是这里写入数字是对我们不可读的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值