打开和关闭文件涉及的知识点包括:文件结构指针FILE,文件操作模式、以及库函数fopen()、fclose()。
1,文件结构指针
每个被从磁盘读入内存的文件都会在内存中占据一块临时缓冲区,文件结构指针的作用就是指向该缓冲区,方便对缓冲区数据进行操作。
在对文件进行操作时,需要定义一个指向该文件缓冲区的指针:
FILE *fp;
2、文件操作模式
在打开一个文件时,需要指定打开的模式,打开的模式不同,对文件操作的过程和结果也不同。 3.、fopen ()和fclose()
fopen()和fclose()必须一起使用,fopen()用于打开文件,对文件进行操作之后,又必须使用fclose()关闭文件,否则缓冲区的数据会有被误用的风险。
#include
#include
int all;
int main() {
printf("file write and read\n");
FILE* fp;//文件结构指针,指向内存中打开的临时缓冲区
char ch;
if ((fp = fopen("D:\\安装包\\test.txt", "w")) == NULL) {//绝对路径需要在文件夹分隔符——反斜杠之前加放斜杠作为转义符,否则会报错。
printf("file not exist\n");
return 0;
}
ch = getchar();
putchar(ch);
while (ch != '#') {
fputc(ch, fp);
ch = getchar();
putchar(ch);
}
fclose(fp);
putchar(10);
return 0;
}
对文件进行操作的库函数有如下几种:
1、fgetc()和fput()用于顺序读写文件,其顺序和物理阅读的顺序一样,fget()从文件开头向结尾逐字符读取,fput()则从fp指向的位置逐字符向后写入。
2.fgets和fputs用于读取字符串,
#include
#include
#include
int all;
int main() {
printf("file write and read\n");
FILE* fp1,*fp2;
char ch[100];
if ((fp1 = fopen("E:\\c\\一朝忽觉京梦醒,半世浮沉雨打萍.txt", "r")) == NULL) {
printf("file not exist\n");
return 0;
}
if ((fp2 = fopen("E:\\c\\一朝忽觉京梦醒,半世浮沉雨打萍(副本).txt", "w")) == NULL) {
printf("file not exist\n");
return 0;
}
while (!feof(fp1)) {
fgets(ch, 10, fp1);
fputs(ch, fp2);
}
fclose(fp2);
fclose(fp1);
putchar(10);
return 0;
3、fprint和fscanf用于格式化输入输出文件
void move(char one, char two)
{
FILE* fp1;
if ((fp1 = fopen("E:\\c\\hannoi.txt", "a")) == NULL) {
printf("file not exist\n");
exit(0);
}
fprintf(fp1, "%d:%c->%c\n",all, one, two);
fclose(fp1);
all++;
}
4、fread和fwrite用于读写二进制文件。
buffer:是一个地址,对fread来说,它是用来存放从文件读入的数据的存储区的地址,对fwrite来说,它是指把从该地址开始的存储区的数据向文件写出。
size:要读多少字节的数据
count:要读多少个大小为size的数据
fp:文件指针。
包括几个函数:
1、rewind
rewind(fp);//回到fp所指文件的开头
2、fseek改变文件的标记位置
位移量表示为字节
起始点的含义如下:
3、ftell函数测定文件指针的当前位置
1、ferror
在调用前面介绍的各种输入输出函数(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf)时,除了函数返回值可以检错之外,还可以用ferror函数进行检测。
ferror(fp);//返回值为0表示未出错,非0则表示出错,
2、clearerr
clear函数的作用是使文件结束或者文件出错标志重置为0,比如在调用调用一个输入输出函数时出错,ferror的值变为了非0,应该立即调用clearerr函数将其置为0.
clearerr(fp);