C语言将文件看作是字符构成的序列,即字符流。其基本的存储单位是字节。
C语言中的文件,按照它的ASC代码存放,称为ASC文件或文本文件。按照数据值的二进制代码存放,称为二进制文件。
C语言在stdio.h中定义了一个file文件结构体类型,包含管理和控制文件所需要的各种信息。
定义一个指向文件结构体类型的指针变量的形式:
FILE * 指针变量名;
例如:FILE *fp1,*fp2;
则fp1,fp2是可以指向2个FILE文件结构体的指针变量。文件指针变量的赋值操作是由打开文件函数fopen()实现的。
fopen()函数的原型是:
FILE *fopen(char *filename,char *mode);
其中filename 是要打开的文件名,mode是说明处理文件的方式。它的调用方式一般为:
文件指针变量=fopen(文件名,处理文件方式);
例如:fopen("a:\\exam1.c","r")
江苏中考成绩查询时间注意:文件名是要打开的文件的文件名字,可以是包含盘符、路径、文件名、扩展名的文件标识符。但在书写时要符合c语言的规定。例如文件名“a:\tc\w1.c”,在该函数中的文件名应写成“a:\\tc\\w1.c”。
如果是二进制文件,在使用时值要在模式后添加字符b即可,如“rb”\"rb+"分别表示读取二进制文件和一读取/写入打开二进制文件。
由于文件不存在等原因造成不能打开文件,则调用fopen()后将返回一个空指针null.
if(fp=fopen("a:\\exam1.c","r")==NULL)
{
printf("Bu neng da kai wen jian \n");
gets();
exit(1);
}
一般exit(0)表示程序正常退出,exit(非零值)表示程序出错后退出。
文件的关闭
当c语言文件使用完后,应该立即关闭文件,防止由于误操作等原因破坏已经打开的文件。文件的关闭通过stdio.h中的fclose()函数实现。具体用法是:
fclose(文件指针);
例如:fclose(fp);
则程序将文件类型指针fp所指向的文件关闭。fp不再指向该文件。
赵子琪女儿1。fputc()函数
函数fputc()的作用是向文件写入一个字符。其调用形式为:
fputc(字符,文件型指针变量)
例:fputc('A',fp);
fp为一个文件类型指针变量,上式将字符常量‘A’(也可以是字符型变量)写入文件当前位置,并且使文件位置指针下移一个字节。如果写入操作成功,返回值是该字符,否则返回EOF.
通过键盘输入字符到文件中,直到输入“*”结束。
#include "stdio.h"
main()
{
FILE *fp;
char f_name[30];
char choise,in_char;
printf("\n\tPlease input the file name\n");
小鱼儿与花无缺演员表scanf("%s",f_name);
fp=fopen(f_name,"w+");
printf("\nPlease input :\n");
in_char=getchar();
while(in_char!='*')
{
fputc(in_char,fp);
in_char=getchar();
}
fclose(fp);
}
从文件中读取一个字符
函数fgetc()的作用是从一个文件中读取一个字符。其调用形式为:
fgetc(文件型指针变量)
例:a=fgetc(fp);
fp为一个文件类型的指针变量,函数fgetc(fp)不仅返回文件当前位置的字符,并且使文件位置指针下移一个字符。如果遇到文件结束,则返回值为文件结束标志EOF。
输入文件名,输出该文件的内容。
#include <stdio.h>
void main()
{
FILE *fp;
char out_ch,f_name[30];
printf("Please input the filename\n");
scanf("%s",f_name);
fp=fopen(f_name,"r");
if(fp!=NULL)
{
printf("The file is:\n");
while((out_ch=fgetc(fp))!=EOF)
{
putchar(out_ch);
}
}
else
{
printf("\n\n\t\t%s The file not find!\n",f_name);
}
fclose(fp);
}
按字符串读写的函数
函数fputs()的作用是向文件写入一个字符串。其调用形式为:
fputs(字符串,文件型指针变量)
其中字符串可以是字符串常量、指向字符串的指针变量、存放字符串数组的数组名。写入文件成功,函数返回值为0,否则为EOF。
注意:字符串的结束标志‘\0’ 不写入。例如:
fputs("Hello",fp);
fp为一个文件型指针变量,上式将字符串中的字符h,e,l,l,o写入文件指针的当前位置。
fgets函数
函数fgets()的作用是从一个文件中读取一个字符串。其调用形式为:
fgets(字符数组,字符数,文件型指针变量)
例:fgets(str,n,fp);0
其作用是从fp指向的文件的当前位置开始读取n-1个字符,并加上字符串结束标志‘\0’一起放入字符数组str中。如果从文件读取字符时遇到换行符或文件结束标志EOF,读取结束。函数返回值为字符数组str的首地址。
将文件 复制到中
#include "stdio.h"
main()
{
FILE *f_in,*f_out;
水冷机箱推荐char str[50];
f_out=fopen("","r");
f_in=fopen("","w");
while(!feof(f_out))
{
fgets(str,30,f_out);
fputs(str,f_in);
}
fclose(f_out);
8月23日是什么节日fclose(f_in);
printf("The file copy finish!");
}
fprintf()函数
函数fprintf()的作用与printf()相似,只是输出对象不是标准输出设备而是文件,即按照格式要求将数据写入文件。它调用的一般形式为:
fprintf(文件型指针变量,格式控制,输出列表)
例如:
fprintf(fp,"%d,%s,%5.1f",num,name,score);
它的作用是将变量num,name,score按照%d,%s,%5.1f的格式写入fp指向的文件当前
位置
fscanf()函数是按照格式要求从文件中读取数据。它调用的一般形式为:
fscanf(文件型指针变量,格式控制,输入表列);
例如:
fscanf(fp,"%ld,%s,%5.1f",&num,name,&score);
它的作用是从fp指向的文件的当前位置开始,按照的格式取出数据,赋给变量num,name,score.
。主要用于数据文件的读
林申个人资料写,即可以使用asc文件也可以使用二进制文件。
将10个学生纪录输入文件中,并显示在屏幕上。
#include "stdio.h"
main()
{
FILE *fp;
long num;
int n,score;
char name[20];
fp=fopen("","w");
printf("Please input :\n");
for(n=1;n<=10;n++)
{
scanf("%s%10ld%d",name,&num,&score);
fprintf(fp,"%20s%10ld%5d\n",name,num,score);
}
fclose(fp);
fp=fopen("","r");
for(n=1;n<=10;n++)
{
fscanf(fp,"%20s%10ld%5d\n",name,&num,&score);
printf("%20s%10ld%5d\n",name,num,score);
}
fclose(fp);
}
fwrite()函数
作用是将成批的数据块写入文件。
fwrite(写入文件的数据块的存放地址,一个数据块的字节数,数据块的个数,文件型指针变量);
如果函数fwrite()操作成功,则返回值为实际写入文件的数据块的个数。
例如:已知struct student类型的数组stu[20],则语句
则fwrite(&stu[1],sizeof(struct student),2,fp);
从结构体数组元素str[1]存放的地址开始,以一个结构体struct student类型变量所占字节数为一个数据块,共写入文件类型指针fp指向的文件2个数据块,即stu[1]\stu[2]的内容写入文件。如果操作成功,函数的返回值为2。
fread()函数
作用是从文件中读出成批的数据块。
fread(从文件读取得数据块的存放地址,一个数据块的字节数,数据块的个数,文件型指针变量);
如果函数fread()操作成功,则返回值为实际从文件中读取数据块的个数。
例如已知stu1是一个结构体struct student变量,则
fread(&stu1,sizeof(struct student),1,fp);
从文件类型指针fp指向的文件的当前位置开始,读取1个数据块,该数据块为结构体struct student类型变量所占字节数,然后将读取得内容放入变量stu1中。
注意:fwrite()和fread()函数读写文件时,只有使用二进制方式,才可以读写任何类型的数据。最常用于读写数组和结构体类型数据。
函数feof()
用来检测一个指向文件的指针是否已经指到了文件最后的结束标志eof。
调用的一般形式为:
feof(文件型指针变量);
如果文件型指针指向的文件的当前位置为结束标志eof,则函数返回一个非零值,否则返回0值。
函数rewind()将令指向文件的指针重新指向文件的开始位置。函数无返回值。其调用形式为:
rewind(文件型指针变量);
例如:
rewind(fp);
fp是一个指向文件的指针,执行该语句后,fp指向文件的开始位置,即文件的第一个数据。
函数fseek()可以将使得指向文件的指针变量指向文件的任何一个位置,实现随即读写文件。它调用的形式为:
fseek(文件型指针变量,偏移量,起始位置);
函数fseek()将以文件的起始位置为基准,根据偏移量往前或往后移动指针。
其中偏移量是一个长整型数,表示从起始位置移动的字节数,正数表示指针往后移,负数表示指针往前移。起始位置用0、1、2或者用名字seek_set\seek_cur\seek_end代表文件开始、文件当前位置和文件结束位置。如果指针设置成功,返回值为0,否则为非0值。
函数ftell()用于测试指向文件的指针的当前位置。它的调用方式为:
ftell(文件型指针变量);
函数的返回值是一个长整形数,如果测试成功,则返回指向文件的指针当前指向的位置距离文件开头的字节数,否则返回-1L
作业:
1、将键盘输入的10个浮点数保存到一个二进制文件中,然后在文件末尾再追加若干数据,最后统计文件中数据的个数。
2、已知2个文件data1和data2,将他们的内容和并起来,生成第3个文件data3.
3、已知一个由西文字符组成的ask文件,要求将文件中的英文字母按照如下形势变换,然后生成一个新的密码文件。a<=>z b<=>y c<=&
4、已知一个文件包含若干人的姓名、通讯地址、和电话,要求根据此文件生成一个只包含所有人姓名和电话的新文件。
发布评论