文件的读写
一.fputc函数和fgetc()函数(putc函数和getc()函数)
1.fputc函数
把一个字符写到磁盘文件上去,调用形式:
fputc(ch,fp);成功输出字符,失败EOF(-1)
2.fgetc函数
读入一个字符,该文件必须是以读或以读写方式打开的
调用形式: ch=fgetc(fp);
while(ch!=EOF)
读入字符时,遇到结束符EOF(-1),读取结束,但是有些
二进制数的值正好是-1,就被当作结束符处理,所以提供了
一个feof(fp)来判断是否结束
二.fread函数和fwrite函数
用来读取一组数据,调用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:是一个指针,对于fread来说,它是读入一个数
据的存放地址,对fwrite来说,是输出一个数的存放地址
size:要读写的字节数
count:要进行读写多少个size字节的数据项
三.fprintf和fscanf函数
调用格式:
fprintf(文件指针,格式字符串,输出表列);
fscanf(文件指针,格式字符串,输出表列);
用fprintf()和fscanf()函数对磁盘文件的读写,使用方
便,容易理解,但是在输入时要进行ASCII码转换到二进制
形式,输出时将二进制转换成ASCII码,花费时间较多,所
以在内存与磁盘频繁交换的时候,最好不要用这两个函数
四.fputs和fgets函数
fgets是从指定文件读入一个字符串
fputs是向指定文件输入一个字符串
形式如下:
fgets(str,n,fp);
fputs(str,fp);
文件定位
1.rewind函数
使位置指针重新返回文件的开头,此函数没有返回值
调用格式:
rewind(fp);
2.fseek函数
可以实现改变文件的位置
fseek(文件类型指针,位移量,起始点);
位移量要求是long型的数据,所以位移数字末尾要加L
文件开始 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
如:fseek(fp,100L,0);一般用于二进制文件
3.ftell函数
得到流式文件中当前位置,如果出错返回-1
出错检验
1.ferror函数
ferror(fp);
在调用输入输出函数时,如果出现错误,除返回值有反应外
,还可以用ferror函数检查,ferror返回0表示没有出错,
返回非0,表示出错
每次调用输入输出函数都会产生一个新的ferror函数值,素
以每次调用输入输出后,立即检查ferror函数值,否则信息
丢失
在执行fopen函数时,ferror函数初始值自动设置成0
2.clearerr函数
作用是使文件错误标志和文件结束标志置0
假如调用输入输出函数时出错,调用clearerr(fp)
后,ferror(fp)的值变成0,只要出现错误标志,就一直保留
,直到对同一个文件调用clearerr函数或者rewind函数或热
河一个输入输出函数
下面是一个例子来说明
#include <stdio.h>
struct test {
char stu[20];
int age;
}stu[2],stu1[2];
//fputc的用法
void putcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","a")) == NULL) {
printf("file cannot open\n");
return;
}
ch=getchar();
while (ch!='#') {
putc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
}
//getc的用法
void getcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","r+")) == NULL) {
printf("cannot open file");
return ;
}
ch=getc(fp);
while(!feof(fp)){
putchar(ch);
ch=getc(fp);
}
putchar(10);
fclose(fp);
}
//fwrite和fread的用法
void fwriteread(){
FILE *fp;
int i;
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file\n");
return;
}
printf("输入两个学生的信息形如(cuijiantao,23)\n");
for(i=0;i<2;i++){
///
//当输入字符串的时候,后边要用空格和后边的隔开,否则会出现不可估量的错误
scanf("%s %d",stu[i].stu,&stu[i].age);///
///
fwrite(&stu[i],sizeof(test),1,fp);
}
rewind(fp);
for(i=0;i<2;i++){
fread(&stu1[i],sizeof(test),1,fp);
printf("%s %d\n",stu1[i].stu,stu1[i].age);
}
fclose(fp);
}
//fprintf()和fscanf()函数的用法以及fputs() 和fgets()的用法
/用fprintf()和fscanf()函数对磁盘文件的读写,使用方便,容易理解,
//但是在输入时要进行ASCII码转换到二进制形式,输出时将二进制转换成ASCII码,花费时间较多
//所以在内存与磁盘频繁交换的时候,最好不要用这两个函数
void printfscanfTest(){
FILE *fp;
int i=3;
int j;
char s[100];
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file");
}
fputs("sdfasdf",fp);
//fprintf(fp,"%d",i);
rewind(fp);
//fscanf(fp,"%d",&j);
fgets(s,10,fp);
//printf("%d",j);
printf("%s\n",s);
fclose(fp);
}
void main(){
printfscanfTest();
}
一.fputc函数和fgetc()函数(putc函数和getc()函数)
1.fputc函数
把一个字符写到磁盘文件上去,调用形式:
fputc(ch,fp);成功输出字符,失败EOF(-1)
2.fgetc函数
读入一个字符,该文件必须是以读或以读写方式打开的
调用形式: ch=fgetc(fp);
while(ch!=EOF)
读入字符时,遇到结束符EOF(-1),读取结束,但是有些
二进制数的值正好是-1,就被当作结束符处理,所以提供了
一个feof(fp)来判断是否结束
二.fread函数和fwrite函数
用来读取一组数据,调用形式如下:
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:是一个指针,对于fread来说,它是读入一个数
据的存放地址,对fwrite来说,是输出一个数的存放地址
size:要读写的字节数
count:要进行读写多少个size字节的数据项
三.fprintf和fscanf函数
调用格式:
fprintf(文件指针,格式字符串,输出表列);
fscanf(文件指针,格式字符串,输出表列);
用fprintf()和fscanf()函数对磁盘文件的读写,使用方
便,容易理解,但是在输入时要进行ASCII码转换到二进制
形式,输出时将二进制转换成ASCII码,花费时间较多,所
以在内存与磁盘频繁交换的时候,最好不要用这两个函数
四.fputs和fgets函数
fgets是从指定文件读入一个字符串
fputs是向指定文件输入一个字符串
形式如下:
fgets(str,n,fp);
fputs(str,fp);
文件定位
1.rewind函数
使位置指针重新返回文件的开头,此函数没有返回值
调用格式:
rewind(fp);
2.fseek函数
可以实现改变文件的位置
fseek(文件类型指针,位移量,起始点);
位移量要求是long型的数据,所以位移数字末尾要加L
文件开始 SEEK_SET 0
文件当前位置 SEEK_CUR 1
文件末尾 SEEK_END 2
如:fseek(fp,100L,0);一般用于二进制文件
3.ftell函数
得到流式文件中当前位置,如果出错返回-1
出错检验
1.ferror函数
ferror(fp);
在调用输入输出函数时,如果出现错误,除返回值有反应外
,还可以用ferror函数检查,ferror返回0表示没有出错,
返回非0,表示出错
每次调用输入输出函数都会产生一个新的ferror函数值,素
以每次调用输入输出后,立即检查ferror函数值,否则信息
丢失
在执行fopen函数时,ferror函数初始值自动设置成0
2.clearerr函数
作用是使文件错误标志和文件结束标志置0
假如调用输入输出函数时出错,调用clearerr(fp)
后,ferror(fp)的值变成0,只要出现错误标志,就一直保留
,直到对同一个文件调用clearerr函数或者rewind函数或热
河一个输入输出函数
下面是一个例子来说明
#include <stdio.h>
struct test {
char stu[20];
int age;
}stu[2],stu1[2];
//fputc的用法
void putcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","a")) == NULL) {
printf("file cannot open\n");
return;
}
ch=getchar();
while (ch!='#') {
putc(ch,fp);
putchar(ch);
ch=getchar();
}
fclose(fp);
}
//getc的用法
void getcTest() {
FILE *fp;
char ch;
if ((fp=fopen("c:\\1.txt","r+")) == NULL) {
printf("cannot open file");
return ;
}
ch=getc(fp);
while(!feof(fp)){
putchar(ch);
ch=getc(fp);
}
putchar(10);
fclose(fp);
}
//fwrite和fread的用法
void fwriteread(){
FILE *fp;
int i;
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file\n");
return;
}
printf("输入两个学生的信息形如(cuijiantao,23)\n");
for(i=0;i<2;i++){
///
//当输入字符串的时候,后边要用空格和后边的隔开,否则会出现不可估量的错误
scanf("%s %d",stu[i].stu,&stu[i].age);///
///
fwrite(&stu[i],sizeof(test),1,fp);
}
rewind(fp);
for(i=0;i<2;i++){
fread(&stu1[i],sizeof(test),1,fp);
printf("%s %d\n",stu1[i].stu,stu1[i].age);
}
fclose(fp);
}
//fprintf()和fscanf()函数的用法以及fputs() 和fgets()的用法
/用fprintf()和fscanf()函数对磁盘文件的读写,使用方便,容易理解,
//但是在输入时要进行ASCII码转换到二进制形式,输出时将二进制转换成ASCII码,花费时间较多
//所以在内存与磁盘频繁交换的时候,最好不要用这两个函数
void printfscanfTest(){
FILE *fp;
int i=3;
int j;
char s[100];
if((fp=fopen("c:\\1.txt","w+"))==NULL){
printf("cannot open file");
}
fputs("sdfasdf",fp);
//fprintf(fp,"%d",i);
rewind(fp);
//fscanf(fp,"%d",&j);
fgets(s,10,fp);
//printf("%d",j);
printf("%s\n",s);
fclose(fp);
}
void main(){
printfscanfTest();
}