文件操作指令fgetc fgets fread fprintf 各类输入输出的区别。

1. 文件的打开关闭、打开方式

    文件的打开

int main(int argc,char * argv[])
{
    FILE *fp = fopen("out.dat","w+");  //打开的文件为 out.dat 打开方式为 w+

    if(fp==NULL)   //如果fp为null则说明 打开失败
    {
        printf("OPEN FILE FAILE \n");    
    }

    fprintf(fp,"OPEN FILE SUCCEED \n");
}

    打开方式

模式描述目标文件存在目标文件不存在
r(只读) 打开一个文本文件    正常只读返回NULL
w(只写) 打开一个文本文件清空、正常只写创建文件
a(追加) 向文件文件尾添加数据正常追加创建文件
r+(读写) 打开一个文本文件正常读写返回NULL
w+(读写) 建立一个新的文本文件清空、正常读写创建文件
a+(读写) 打开一个文本文件正常追加创建文件

如果在以上任意打开方式后加入'b',如rb rb+。则是对一个二进制文件进行只读或读写。

文件的关闭

int fclose(FILE * p);
//关闭文件指针

内存单元以页为单位  一页代表4KB 一次至少申领33页 只要申请了就算全部释放也会留下33页

文件内容的读取

    1.字符IO

      fgetc

       读取单个字符 读取后fp指针后移

#include<stdio.h>
#include<string.h>
int main(int argc,char * argv[])
{


	FILE *fp=fopen(argv[1],"r"); 

	if(fp==NULL)
	{
		printf("FILE:%s faile",argv[1]);   argv[0]存储运行指令(a.out)   argv[1]存储目标文件名
	}
	
	char s[40]="";
	int i=0;
	while(1)
	{
		int ch=fgetc(fp);
		if(feof(fp))          //到达文件末尾
			break;
		s[i++]=ch;
	}                        
	printf("%s",s);       
	return 0;
}

       fpuc

        将单个字符写入文件,位子自动往后移动

#include<stdio.h>
#include<string.h>
int main(int argc,char * argv[])
{

	FILE *fp=fopen(argv[1],"w");  
	if(fp==NULL)
	{
		printf("FILE:%s faile",argv[1]);
	}
	
	char s[40]="Write here";
	int i=0;
	char c;
	while(1)
	{
		c=fgetc(fp);
		if(feof(fp))
		  break;
		s[i++]=c;
	}
	return 0;
}

      2.字符串IO

        fgets

         读取一个字符串中特定长度的字符

#include<stdio.h>

int main(int agrc,char * agrv[])
{
	if(agrc<2)
	{
		printf("use:%s FILEname",agrv[0]);
		return -1;
	}

	FILE * fp = fopen(agrv[1],"r+");
	
	char buf[10]="";
	fgets(buf,5,fp);         //从fp中读取5个字符给buf 如果fp中第五个字符不是空白 则会抛弃并且自动补\0
	printf("%s",buf);
	return 0;
}

          fputs

           字符串buf写入fp所指的文件之中

#include<stdio.h>

int main(int agrc,char * agrv[])
{
	if(agrc<2)
	{
		printf("use:%s FILEname",agrv[0]);
		return -1;
	}

	FILE * fp = fopen(agrv[1],"r+");
	
	char buf[10]="HELLO";
	fputs(buf,fp); 
	return 0;
}

      二进制IO

      fread

#include<stdio.h>

struct bok
{
	int no;
	char name[40];
	int price;
};
int main(int argc,char * argv[])
{
	struct bok ba[4]={};
	
	FILE * fp = fopen(argv[1],"r");
	if(fp==NULL)
	{
		printf("打开文件失败\n");
	}
	int i=0;
	struct bok temp={};
	while(1)
	{   
		if(fread(&temp,sizeof(struct bok),1,fp)>0)
		{
			ba[i]=temp;
			i++;
		}else{
			break;
		}
	}
	int j;
	for(j=0;j<i;j++)
	{
		printf("%d %s %d\n",ba[j].no,ba[j].name,ba[j].price);
	}
	return 0;
}

      fwrite

#include<stdio.h>

struct bok
{
	int no;
	char name[40];
	int price;
};
int main(int argc,char * argv[])
{
	struct bok ba[4]={{1,"山海经",10},
					  {2,"水浒传",20},
					  {3,"西游记",30},
					  {4,"从百草园走到三味书屋",50}};
	
	FILE * fp = fopen(argv[1],"w");
	if(fp==NULL)
	{
		printf("打开文件失败\n");
	}
	int i=0;
	for(i=0;i<4;i++)
	{
		fwrite(ba+i,sizeof(struct bok),1,fp);
	}
		
	return 0;
}

      格式化IO

        fprintf

#include<stdio.h>

int main()
{
    FILE *fp = fopen("abc.dat","w+");
    int i=0;
    if(fp==NULL)
    {
        printf("OPEN FILE FAILE \n");
        return 0;    
    }
    fprintf(fp,"case:%d OPEN FILE SUCCEED",i);
    return 0;
}

        fscanf

#include <stdio.h>
#include <stdlib.h>
int main()
 
{
   char str1[10], str2[10], str3[10];
   int year;
   FILE * fp;
   fp = fopen ("out.dat", "w+");
   fputs("We are in 2021", fp);
      rewind(fp);
   fscanf(fp, "%s %s %s %d", str1, str2, str3, &year);
      printf("Read String1 |%s|\n", str1 );
   printf("Read String2 |%s|\n", str2 );
   printf("Read String3 |%s|\n", str3 );
   printf("Read Integer |%d|\n", year );
   fclose(fp);
      return(0);
 
}

    随机IO

      void fseek(FILE *fp ,long offset,int orgin);

      offset 偏移量  正向后 负向前    正左负右

      origin 参考位置            SEEK_SET开头   SEEK_CUR当前位置 SEEK_END 末尾

      void rewind(FILE * fp);   //将指针位置指向开头 fseek(fp,0,SEEK_SET);

   获取文件位置

    

     long int fteil(FILE * fp);

    

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值