第10章 对文件的输入输出
函数名 |
调用形式 |
功能 |
fopen |
fopen(“a1”,”r”); |
打开一个文件 |
fclose |
fclose( fp ); |
关闭数据文件 |
fgetc |
fgetc( fp ); |
从fp指向的文件读入一个字符 |
fputc |
fputc( ch,fp); |
把字符ch写到文件指针变量fp所指向的文件中 |
fgets |
fgets(str,n,fp); |
从fp所指向的文件中读入一个长度为n-1的字符串,并在最后加一个’\0’字符,然后存放到字符数组str中 如果在读完n-1一个字符之前遇到换行符’\n’或文件结束符EOf,读入即结束,但将所遇到的’\n’也读入 |
fputs |
fputs( str fp); fputs( “China”,fp); |
把str所指向的字符串写到fp所指向的文件中 |
fscanf |
fcanf ( fp,”%d”,&i); |
从fp所指向的文件中读取一个整数送到整型变量i |
fprintf |
fprintf( fp,”%d”,i) |
将i按%d的格式输出到fp指向的文件中 |
fread |
fread( buffer,size,count,fp) Buffer是地址 |
从fp所指向的文件中buffer地址开始读取count个大小为size的字符。若成功返回count |
fwrite |
fwrite( buffer,size,count,fp) |
向fp所指向的文件中buffer地址开始存入count个大小为size的字符。若成功返回count |
rewind |
rewind( fp ) |
使文件位置标记指向文件开头 |
fseek |
fseek( fp, xxL,0) |
0表示文件开始位置 1表示文件当前位置 2表示文件末尾位置 位移量是long型,不要忘记用L |
1、打开与关闭文件
fopen( 文件名,使用文件方式);
常用下面的方法打开和关闭一个文件
FILE *fp; //指向文件型数据的指针变量
if( (fp = fopen("file1","r") )==NULL)
{
printf(" Cannot open!");
exit(0); //终止程序
}
fclose (fp); //关闭数据文件
2、顺序读写数据文件
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char ch,filename[10];
scanf("%s",filename);
if( (fp=fopen(filename,"w"))==NULL)
{
printf("打开失败\n");
exit(0);
}
ch = getchar(); //接收最后的回车符
ch = getchar(); //接收第一个字符
while( ch!='#') //输入#循环结束
{
fputc(ch,fp);
putchar(ch);
ch = getchar();
}
fclose(fp);
return 0;
}
3、随机读写数据文件
1 #include <stdio.h>
2 #include <stdlib.h>
3 #define SIZE 10
4 struct Studet
5 {
6 char name[10];
7 int num;
8 int age;
9 }stud[SIZE];
10 void Save()
11 {
12 FILE *fp;
13 int i;
14 if( (fp=fopen("stu.dat","wb"))==NULL)
15 {
16 printf("Connot open\n");
17 exit(0);
18 }
19 for( i=0; i<SIZE; i++)
20 if( fwrite( &stud[i],sizeof( struct Studet),1,fp)!=1)
21 printf("Write Error\n");
22 fclose(fp);
23 }
24 int main()
25 {
26 int i;
27
28 for( i=0; i<SIZE; i++)
29 scanf("%s%d%d",stud[i].name,&stud[i].num,&stud[i].age);
30 Save();
31 FILE *fp;
32 if( (fp=fopen("stu.dat","rb"))==NULL)
33 {
34 printf("Connot open\n");
35 exit(0);
36 }
37 for( i=0; i<10; i+=2)
38 {
39 fseek( fp, i*sizeof(struct Studet),0);
40 fread(&stud[i],sizeof(struct Studet),1,fp);
41 printf("%-10s%4d%4d\n",stud[i].name,stud[i].num,stud[i].age);
42 }
43 return 0;
44 }
大概文件操作最难也就考到这个地步了吧!
4、fseek
SEEK_SET: 文件开头
SEEK_CUR: 当前位置
SEEK_END: 文件结尾
其中SEEK_SET,SEEK_CUR和SEEK_END和依次为0,1和2.
简言之:
fseek(fp,100L,0);把fp指针前移到离文件开头100字节处;
fseek(fp,100L,1);把fp指针前移到离文件当前位置100字节处;
fseek(fp,-100L,2);把fp指针后退到离文件结尾100字节处。
来源:oschina
链接:https://my.oschina.net/u/4401856/blog/4245463