C语言中没有输入输出语句,所有的输入输出功能都用 ANSI C提供的一组标准库函数来实现。文件操作标准库函数有:
文件的打开操作: fopen 打开一个文件
文件的关闭操作 : fclose 关闭一个文件
文件的读写操作 : fgetc 从文件中读取一个字符
fputc 写一个字符到文件中去
fgets 从文件中读取一个字符串
fputs 写一个字符串到文件中去
fprintf 往文件中写格式化数据
fscanf 格式化读取文件中数据
fread 以二进制形式读取文件中的数据
fwrite 以二进制形式写数据到文件中去
getw 以二进制形式读取一个整数
putw 以二进制形式存贮一个整数
文件状态检查函数 fEOF 文件结束:
ferror 文件读/写出错
clearerr 清除文件错误标志
ftell 了解文件指针的当前位置
文件定位函数 rewind 反绕:
fseek 随机定位
下面详细讲解一下各个函数的用法:
1、fopen、fclose
fopen
函数原型: FILE * fopen(const char * path, const char * mode)
参数path字符串包含将要打开的文件路径及文件名,参数mode字符串则代表着流形态。
文件顺利打开后,指向该流的 文件指针 就会被返回。如果文件打开失败则返回NULL,并把错误代码放在error中。
mode有下列几种形态字符串:
上述的形态字符串都可以再加一个 b 字符,如 rb、w+b 或 ab+ 等组合,加入 b 字符用来告诉函数库以二进制模式打开文件。如果不加 b,表示默认加了 t,即 rt、wt,其中 t 表示以 文本模式 打开文件。
fclose
函数原型:int fclose( FILE *fp )
如果流成功关闭,fclose 返回 0,否则返回EOF(-1)
可以在fclose(fp)后使用
来判断是否成功关闭文件,关闭失败,则fclose返回1并输出错误原因
函数应用实例:
现在我们来看一个简单的实例例子:
#include <;
int main(){
int a;
int c=111;
int b;
char ch;
char buf[255];
char buff[255];
FILE *p;
//文件写入
p=fopen(";,"a");
// fputc('\n',p); //将字符写入到p指向的输入流
// fprintf(p,"this is point!\n"); //将字符串写入缓冲区
// fputs("this is fputs...\n",p); //将字符串写入到p指向的输入流,成功返回非负值,失败返回EOF
c=fclose(p); //将缓冲区数据写入文件,并关闭文件文件释放缓冲区
//文件读取
p=fopen(";,"r");
//方法一
// while((ch=fgetc(p))!=EOF){
// fputc(ch,stdout); //将ch表示的字符送到标准输出流中去
// }
//方法二
fscanf(p,"%s",buf); //读取p输入流,并复制到buf,遇到空格或换行结束
printf("fscanf:%s\n",buf);
//移动文件指针
// int len;
// len=ftell(p); //获得文件指针偏移量
// rewind(p); //移动文件指针到文件头
// fseek(p,2L,0); //移动文件指针(文件指针,偏移量长整型有正负值,0表示文件头1表示当前位置2表示文件尾)
// printf("%d",len);
//方法三
fgets(buff,5,p); //从p指向的输入流中获取n-1个字符,遇到换行符就停止读取,将读取的字符串复制到缓冲区buff包括换行符
int i=0;
printf("buff:%s\n",buff);
// printf("buff:");
// while(*(buff+i)!='\0'){ //*(buff+i)==buff[i],编译器自动给字符数组末尾加上'\0'结束符
// printf("%c",buff[i]);
// i++;
// }
c=fclose(p);
fputs("fputs:ok\n",stdout);
fprintf(stdout,"fprintf:no\n");
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
return 0;
}
fgetc
函数原型: int fgetc(FILE *fp)
从文件指针fp指向的文件中读取一个字符,读取一个字节后,光标位置后移一个字节。这个函数的返回值,是返回所读取的一个字节。如果读到文件末尾或者读取出错时返回EOF。
注意到虽然是返回一个字节,但是返回值类型为int而不知unsigned char,因为EOF为-1,返回值要能够表示-1。
fputc
函数原型:int fputc (int c, FILE *fp)
c是一个整型变量,是内存要写到文件中的字符(C语言中整型量和字符量可以通用)
在正常调用情况下,函数返回写入文件的字符的ASC||码值,出错时,返回EOF。当正确写入一个字符或一个字节的数据后,文件内部写指针会自动后移一个字节的位置。
函数应用实例:将一个文件中的大写字母转为小写字母,小写字母转为大写字母后保存到另一个文件中
- #include<;
- int main()
- {
- char ch;
- FILE *fp1,*fp2;
- fp1 = fopen("a.txt","r");
- if(fp1 == NULL)
- return -1;
- fp2 = fopen("b.txt","w");
- if(fp2 == NULL)
- return -1;
- ch = fgetc(fp1);
- while(ch != EOF)
- {
- if(ch >= 'a' && ch <= 'z')
- ch -= 32;
- else if(ch >= 'A' && ch <= 'Z')
- ch += 32;
- fputc(ch,fp2);
- ch = fgetc(fp1);
- }
- fclose(fp1);
- fp1 = NULL;
- fclose(fp2);
- fp2 = NULL;
- return 0;
- }
3、fgets、fputs
函数应用实例:测试fgets
- #include<;
- int main(int argc,char **argv)
- {
- FILE *fp1;
- char str[256];
- fp1 = fopen("a.txt","r");中的内容是ABCabc123
- if(fp1 == NULL)
- return -1;
- if(fgets(str,4,fp1) == NULL)//这里调用fgets一次,读取出3个字符
- printf("失败");
- else
- printf("%s\n",str);
- if(fgets(str,7,fp1) == NULL)//这里第二次调用fgets,读取出剩下的6个字符
- {
- printf("失败");
- }
- else
- printf("%s\n",str);
- if(fgets(str,2,fp1) == NULL)//由于文件已经读取完毕,因此返回NULL
- printf("失败");
- else
- printf("%s",str);
- return 0;
- }
函数应用实例:将一个文件中的内容复制到另一个文件
- #include<;
- int main(int argc,char **argv)
- {
- FILE *fp1,*fp2;
- char str[256];
- fp1 = fopen("a.txt","r");中的内容是ABCabc123
- fp2 = fopen("b.txt","w");为空
- if(fp1 == NULL)
- return -1;
- if(fp2 == NULL)
- return -1;
- if(fgets(str,4,fp1) == NULL)//这里调用fgets一次,读取出3个字符
- printf("失败");
- else
- fputs(str,fp2);
- if(fgets(str,7,fp1) == NULL)//这里第二次调用fgets,读取出剩下的6个字符
- printf("失败");
- else
- fputs(str,fp2);
- if(fgets(str,2,fp1) == NULL)//由于文件已经读取完毕,因此返回NULL
- printf("失败");
- else
- fputs(str,fp2);
- return 0;
- }
结束语
好了,今天的知识就分享到这里,欢迎关注“怀念感觉12”,私信关键词:学习资料,获取更多学习资源,如果文章对你有有帮助,请收藏关注,在今后与你分享更多学习c/c++的文章。同时欢迎在下面评论区留言如何学习c/c++。
1.《c如何以文件路径,如何查找文件路径》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《c如何以文件路径,如何查找文件路径》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/3242611.html