C语言文件指针定义




文件的打开与关闭


fopen函数

头文件:stdio.h
功    能:以type方式打开filename文件并返回该文件的指针
用    法:FILE *fopen(char *filename,char *type);    
返回值:filename的文件指针


注意:
1.凡用“r”打开一个文件时,该文件必须已经存在,且只能从该文件读出。
2.用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。若以写或读写方式打开一个已存在的文件时将清除原来文件的内容,希望写入的字符以文件末开始存放,必须以追加方式打开文件。
3.若要向一个已存在的文件追加新的信息,只能用“a”方式打开文件。但此时该文件必须是存在的,否则将会出错。


fclose函数

头文件:stdio.h
功   能:关闭一个流
用   法:int fclose(FILE *stream);
返回值:成功返回0,不成功返回EOF(-1)



文件的读写(头文件均为stdio.h)

字符读写函数

fgetc函数

功   能:从fp所指向的文件中读取字符
用   法:int fgetc(FILE *fp);
返回值:返回文件fp所指向的文件中的字符值(EOF为文件尾)
补   充:
1.调用该函数时,文件使用方式必须是以读或读写方式打开的。
2.在文件内部有一个位置指针,用来指向文件的当前读写

fputc函数

功能:将字符(ch的值)输出到fp所指向的文件中去。
用法:int futc(int ch,FILE *fp);
返回值:写入成功返回写入字符ch
             不成功返回EOF

示例:
  1. #include <stdio.h>  
  2. int main()  
  3. {  
  4.     FILE *fp;  
  5.     char ch,filename[20];  
  6.     printf("Please input your filename:");  
  7.     scanf("%s",filename);  
  8.     if(!(fp=fopen(filename,"w")))  
  9.     {  
  10.         printf("Can not open %s\n",filename);  
  11.     }  
  12.     else  
  13.     {  
  14.         printf("Please input the sentences you write:");  
  15.         ch=getchar();  
  16.         ch=getchar();  
  17.         while(ch!=EOF)  
  18.         {  
  19.             fputc(ch,fp);  
  20.             ch=getchar();  
  21.         }  
  22.         fclose(fp);  
  23.     }  
  24.         if(!(fp=fopen(filename,"r")))  
  25.     {  
  26.         printf("Can not open %s\n",filename);  
  27.     }  
  28.     else  
  29.     {  
  30.         printf("The content of %s is:",filename);  
  31.         while(!feof(fp))  
  32.         {  
  33.             ch=fgetc(fp);  
  34.             putchar(ch);  
  35.         }  
  36.         printf("\n");  
  37.         fclose(fp);  
  38.     }  
  39.     return 0;  
  40. }  


字符串读写函数

fgets函数

功   能:从fp所指向的文件(stdin特殊文件)中读取长度为n的字符串保存到string中
用   法:char *fgets(char *string, int n, FILE *fp);
返回值:成功,返回string
             失败,返回NULL

fputs函数

功   能:将字符串string写入fp所指向的文件中。
用   法:int fputs(char *string, FILE *fp);
返回值:输入成功,返回值0
             输入失败,返回EOF

示例:

  1. #include <stdio.h>  
  2. #define LEN 100  
  3. int main()  
  4. {  
  5.     FILE *fp;  
  6.     char ch,string[LEN],filename[20],string1[LEN];  
  7.   
  8.     printf("Please input your filename:");  
  9.     scanf("%s",filename);  
  10.   
  11.     if(!(fp=fopen(filename,"w")))  
  12.     {  
  13.         printf("Can not open %s\n",filename);  
  14.     }  
  15.     else  
  16.     {  
  17.         printf("Please input the sentences you write:");  
  18.         ch=getchar();  
  19.         fgets(string,LEN,stdin);  
  20.         if(!fputs(string,fp))  
  21.             printf("写入成功\n");  
  22.         else  
  23.             printf("写入失败\n");  
  24.         fclose(fp);  
  25.     }  
  26.   
  27.         if(!(fp=fopen(filename,"r")))  
  28.     {  
  29.         printf("Can not open %s\n",filename);  
  30.     }  
  31.     else  
  32.     {  
  33.         printf("The content of %s is:",filename);  
  34.         fgets(string1,LEN,fp);  
  35.         printf("%s\n",string1);  
  36.         fclose(fp);  
  37.     }  
  38.     return 0;  
  39. }  



数据块读写函数


fread函数

功   能:从fp指向的文件中读取n个size大小的数据写入ptr指向的地方
用   法:int fread(void *ptr, int size, int n, FILE *fp);
返回值:成功,返回读取元素个数
     不成功,返回0

参数说明:
ptr:读入数据的存放地址(首地址)
size:要读写的字节数
n:要进行读写多少个size字节的数据项

fwrite函数

功   能:
从ptr指向的地方读取n个size大小的数据写入fp指向的文件中
用   法:int fwrite(void *ptr, int size, int n, FILE *fp);
返回值:返回写入文件的实际个数

参数说明:ptr:输出数据的地址(首地址)其余同上
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
示例:
  1. #include <stdio.h>  
  2. #define SIZE 5  
  3. typedef struct  
  4. {  
  5.     char name[20];  
  6.     char num[15];  
  7.     int age;  
  8. }student;  
  9. student stu[SIZE],buf[SIZE];;  
  10. bool save();  
  11. void read();  
  12.   
  13. int main()  
  14. {  
  15.    int i;  
  16.    for(i=0;i<SIZE;i++)  
  17.        scanf("%s %s %d",&stu[i].name,&stu[i].num,&stu[i].age);  
  18.     //fread(&stu[i],sizeof(student),1,stdin);  
  19.  if(save())  
  20.   {   
  21.      read();  
  22.    for(i=0;i<SIZE;i++)  
  23.         printf("name:%s num:%s age:%d\n",buf[i].name,buf[i].num,buf[i].age);  
  24.    }  
  25.    return 0;  
  26. }  
  27.   
  28. bool save()  
  29. {  
  30.     FILE *fp;  
  31.     int i;  
  32.     char filename[50];  
  33.   
  34.     printf("Please input your filename:");  
  35.     scanf("%s",filename);  
  36.     if(!(fp=fopen(filename,"wb")))  
  37.     {  
  38.         printf("Can not open %s\n",filename);  
  39.         return false;  
  40.     }  
  41.         for(i=0;i<SIZE;i++)  
  42.             if(fwrite(&stu[i],sizeof(student),1,fp)!=1)  
  43.                 printf("文件写入失败!\n");  
  44.         fclose(fp);  
  45.     return true;  
  46. }  
  47.   
  48. void read()  
  49. {  
  50.     FILE *fp;  
  51.     int i;  
  52.     char filename[50];  
  53.   
  54.     printf("Please input the filename you want read:");  
  55.     scanf("%s",filename);  
  56.     if(!(fp=fopen(filename,"r")))  
  57.     {  
  58.         printf("Can not open %s\n",filename);  
  59.         return;  
  60.     }  
  61.         for(i=0;i<SIZE;i++)  
  62.             if(fread(&buf[i],sizeof(student),1,fp)!=1)  
  63.                 printf("文件读取失败!\n");  
  64.         fclose(fp);  
  65. }  
  66. /* 
  67. Alice 001 18 
  68. Bob 002 18 
  69. Cobe 003 18 
  70. Dalin 004 18 
  71. Ela 005 18 
  72. */  




格式化读写函数


fscanf函数

功   能:从磁盘文件中按格式读入字符
用   法:int fscanf(FILE *fp, char *format,[argument...]);
示   例:fscanf(fp,"%d,%f",&i,&t);
返回值: 成功返回读入的参数的个数
     失败返回EOF(-1)
注   意:fscanf遇到空格和换行时结束,注意空格时也结束。


fprintf函数

功   能:从磁盘文件中按格式输出字符
用   法:int fprintf(FILE *fp, char *format,[argument...]);
示   例:fprintf(fp,"%d,%6.2f",i,t);
返回值:成功返回输出的字符数
     失败时返回一个负值.

示例:

  1. #include <stdio.h>  
  2. #define SIZE 5  
  3. typedef struct  
  4. {  
  5.     char name[20];  
  6.     char num[15];  
  7.     int age;  
  8. }student;  
  9. student stu[SIZE],buf[SIZE];  
  10.   
  11.   
  12. int main()  
  13. {  
  14.   FILE *fp;  
  15.   char filename[50],ch;  
  16.   printf("input your name num and age:\n");  
  17.   fscanf(stdin,"%s %s %d",&stu[0].name,&stu[0].num,&stu[0].age);//stdin为键盘输入  
  18.   
  19.   printf("Please input your read filename:");  
  20.   scanf("%s",filename);  
  21.   if(!(fp=fopen(filename,"w")))  
  22.   {  
  23.       printf("Can not open %s",filename);  
  24.       return 1;  
  25.   }  
  26.   fprintf(fp,"name:%s num:%s age:%d",stu[0].name,stu[0].num,stu[0].age);  
  27.   fclose(fp);  
  28.   
  29.   return 0;  
  30. }  
  31.   
  32. /* 
  33. Alice 001 18 
  34. */  





GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:3 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐