一、C文件的基础知识
(一)文件概念:
(二)文件分类:
1.数据文件的分类:
1.1.磁盘文件的分类:
(三)文件指针:
1.概念:
2.文件指针的结构体:
3.文件指针的说明:
3.1.stdout标准输出流的使用:
printf("hello world!\n");
fclose(stdout);//关闭标准输出流
printf("hell FIFE!");//不进行打印
3.2.stdin标准输入流的使用:
int a,b;
printf("请输入变量a的值:");
scanf("%d",&a);
fclose(stdin);
printf("请输入变量b的值:");
scanf("%d",b); //用户无法给b赋值
3.3.stderr标准出错的使用:
perror("error!");//perror():打印错误信息
fclose(stdout);
printf("hello world!");
perror("error!");
(四)文件操作流程:
二、打开与关闭文件
打开文件:
(一)概念:
(二)文件参数filename:
(三)文件参数mode参数:
(四)C语言示例:
1.打开文件:
//绝对路径打开文件,只读
//绝对路径打开文件,只读
FILE* fp;//定义文件指针,打开成功返回文件指针,失败返回NULL
//打开文件的两种方式
fp = fopen("D:/test/2.txt","r");存在则返回文件指针,否则返回NULL
//fp = fopen("D:\\test\\2.txt","r");
if(fp == NULL){
perror("fopen");//字符串fopen为提示信息,不是fopen()函数
}
2.mode参数使用:
2.1.r(read):
fp = fopen("D:/test/2.txt","r");//只读,文件存在则打开,不存在则报错
2.2.w(write):
fp = fopen("D:/test/2.txt","w");//w:可写,文件存在则清空,不存在则创建
2.3.a(append):
fp = fopen("D:/test/1.txt","a");//a:追加,文件存在则光标放在文件开头,不存在则创建
关闭文件:
(一)概念:
(二)C语言示例:
FILE* fp;
fp = fopen("D:/test/1.txt","a");
if(fp == NULL){
perror("fopen");
}
//关闭文件
fclose(fp);
fp = NULL;//关闭文件后,指针fp不再指向文件信息区,故而赋值null
三、顺序读写文件
(一)按字符读写文件:
1.写文件:
1.1.概念:
1.2.fputc()函数写入文件:
一次写入一个字符,写入后光标移动到最后,写入的文件覆盖掉之前的文件
void file_write(){
//1.打开文件
FILE* fp;
fp = fopen("D:/test/1.txt","w");
if(fp == NULL){
perror("fopen");
return -1;
}
//2.写入文件
fputc('a',fp);
fputc('b',fp);
fputc('c',stdout);//指向指针为屏幕输出指针,向屏幕输出c
//3.关闭文件
fclose(fp);
fp = NULL;
}
int main(){
file_write();
return 0;
}
void file_write(){
//1.打开文件
FILE* fp;
fp = fopen("D:/test/1.txt","w");
if(fp == NULL){
perror("fopen");
return -1;
}
//2.写入文件
/*fputc:一次写入一个字符,写入后光标移动到最后*/
for(int i = 'a';i <= 'z';i++){
fputc(i,fp);
}
//3.关闭文件
fclose(fp);
fp = NULL;
}
int main(){
file_write();
return 0;
}
2.读文件:
2.1.概念:
2.2.fgetc()函数读取文件:
一次读取一个字符
void file_read(){
//1.打开文件
FILE* fp;//文件指针
fp = fopen("D:/test/1.txt","r");
if(fp == NULL){
perror("fopen");
return -1;
}
//2.读文件
char ch;
while(1){
ch = fgetc(fp);
if(ch == -1){//-1:文件结束标志
break;
}
printf("%c ",ch);
}
//3.关闭文件
fclose(fp);
fp = NULL;
}
int main(){
file_write();
file_read();
return 0;
}
注:
feof(文件指针):推荐使用的文件结束函数:
void file_write(){
//1.打开文件
FILE* fp;
fp = fopen("D:/test/1.txt","w");
if(fp == NULL){
perror("fopen");
return -1;
}
//2.写入文件
/*fputc:一次写入一个字符,写入后光标移动到最后*/
for(int i = 'a';i <= 'z';i++){
fputc(i,fp);
}
//3.关闭文件
fclose(fp);
fp = NULL;
}
void file_read(){
//1.打开文件
FILE* fp;//文件指针
fp = fopen("D:/test/1.txt","r");
if(fp == NULL){
perror("fopen");
return -1;
}
//2.读文件
char ch;
while(1){
ch = fgetc(fp);
if(feof(fp)){//feof(文件指针):推荐使用的文件结束函数
break;
}
printf("%c ",ch);
}
//3.关闭文件
fclose(fp);
fp = NULL;
}
int main(){
file_write();
file_read();
return 0;
}
如果没有进行读操作,直接调用feof()结束函数,永远返回假
3.练习:
void file_readwrite(){
//1.打开文件
FILE* fp;
char filename[10];
printf("请输入文件路径:");
scanf("%c",filename);
fp = fopen(filename,"w");
if(fp == NULL){
perror("fopen");
return -1;
}
//2.读写文件
char ch;//接收变量
ch = getchar();
printf("请输入存储字符串(#结束):");
ch = getchar();
while(ch !='#'){
fputc(ch,fp);
putchar(ch);
ch = getchar();//接收用户的下次输入
}
printf("\n");
//3.关闭文件
fclose(fp);
fp = NULL;
}
int main(){
file_readwrite();
return 0;
}