一 前言
C语言中操作文件的库函数是io.h,完成对文件的输入,输出,并带有不同的读写模式。由于在读写文件时,对整型,字符一视同仁,所以可以用同一种处理来进行。
二 应用
以下介绍io.h库函数中比较重要的几个函数
1.打开文件:
fopen(char *filePoint): 开启指针p指向的文件,若失败则为NULL
2.关闭函数:
fclose(char *filePoint):关闭指针p指向的文件,若失败则为NULL
3.读文件
fgetc(char *filePoint):读取指针p指向的文件数据,如读取到则是具体数据,否则为EOF
fgets(char *filePoint):读取指针p指向的文件数据,如读取到位内存首地址,str值;失败是NULL,可以feof(),ferror()判断是否到文件尾。
fscanf: 格式化读取文件中数据
fread(char *filePoint):二进制读取文件数据,读取成功则返回实际读取数据块个数,读取失败则返回0,可以feof(),ferror()判断是否到文件尾。
getw 以二进制形式读取一个整数,读取成功返回整数值,否则返回EOF(-1)。
4.写文件
fputc(char *filePoint):写入指针p指向的文件数据,如读取到则是具体数据,否则为EOF
fputs(char *filePoint):写入指针p指向的文件数据,如读取到位内存首地址,str值;失败是NULL,可以feof(),ferror()判断是否到文件尾。
fwrite(char *filePoint):二进制写入文件数据,读取成功则返回实际读取数据块个数,读取失败则返回0,可以feof(),ferror()判断是否到文件尾。
writew 以二进制形式写入一个整数,读取成功返回整数值,否则返回EOF(-1)。
5.文件状态检查feof(char *filePoint):判断是否是文件结束位置
ferror(char *filePoint):清除文件错误标志
ftell(char *filePoint):了解文件指针当前位置
6.文件定位函数
rewind(char *filePoint):返回到文件起始数据位置
fseek(char *filePoint):随机定位文件数据位置,获取数据
三 实例
1.读取文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(){
FILE *fp; //判断命令行是否正确s
char* filename = "E:\js.txt";
freadFileBychar(filename);
}
void freadFileBychar(char* filename){
int ch; //定义文件类型指针
FILE *fp; //判断命令行是否正确a
fp = fopen(filename,"r");
if(fp==NULL){
printf("the file<%s>can not be opened.\n");
return;//结束程序执行
}
//成功打开文件
ch = fgetc(fp); //按字符的形式从文件中读取数据
while(ch!= EOF){ //若不为结束符,一直输出
putchar(ch); //若不是结束符,则将其输入到屏幕中
ch = fgetc(fp); //继续从fp指针指向文件中读取下一个字符
}//完成fp指向文件的所有数据显示
fclose(fp); //关闭fp指针所致文件
}
2.写入文件
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void main(){
FILE *fp; //定义文件类型指针
char* filename = "E:\js.txt";
char* a = "i‘吗好地方"; //要写入数据
fputByChar(filename,a);
}
void fputByChar(char* filename,char* result1){
int ch;
FILE *fp;
char *line = "\n";
char *combine = (char *)malloc(strlen(result1)+strlen(line));
fp = fopen(filename,"w");
if(fp==NULL){
printf("文件不存在");
}
if(combine==NULL){
exit(1); //退出当前程序
}
strcpy(combine,result1);
strcat(combine,line);
fputs(combine,fp);
//关闭文件
fclose(fp);
}
注: fopen(filename,"w");在开启文件时:要指定文件操作模式,r:读取模式,w:写入模式;a:所有模式,读写,追加。
3.复制文件
#include "stdlib.h"
#include "string.h"
#include "stdio.h"
#include "io.h"
void main(){
char* sourceFileName = "E:\\js.txt"; //源文件的路径
char* desFileName = "E:\\a.txt"; //目标文件的路径
copyFile(sourceFileName,desFileName);
}
void copyFile(char *sourceFileName,char * desFileName){
int ch ; //读取的数据:读到则是数据,读不到为EOF
FILE *in,*out; //定义in 和out两个文件类型指针
in = fopen(sourceFileName,"r");
out = fopen(desFileName,"w");
if(access(sourceFileName,0)){
printf("文件不存在,无法复制源文件数据到目标文件!");
return;
}
if(in==NULL){
printf("源文件%s打开失败",sourceFileName);
return;
}
if(access(desFileName,0)){
system(desFileName);
printf("创建成功%s",desFileName);
}else{
printf("文件已存在");
}
if(out == NULL){
printf("目标文件%s打开失败",desFileName);
return;
}
ch = fgetc(in); //从源文件读取数据:数据不区分字符,整型
while(ch!=EOF){
fputc(ch,out); //如不是结束符EOF,则放入目标文件
ch = fgetc(in); //迭代进行获取
}
fclose(out);
fclose(in);
}
源文件数据:
目标文件数据
四 总结
总的来说,C语言操作文件比较方便,函数比较清晰,但是在文件的读取,关闭,需要手动操作,库函数的设计,类似Python的模块化编程,不同的是Python的面向对象编程。