文件
分为 文本文件、二进制文件
C语言中对文件的操作流程:(1、2、4是编程固定模式)
- 定义文件指针:FILE *fp;
- 打开文件(文件指针和文件建立关联): fp = fopen(文件名,打开方式);
- 读写文件:通过调用系统库函数读写文件,函数中都需要一个文件指针参数fp
- 关闭文件(断开文件指针和文件的关联): fclose(fp);
eg:
#include <stdio.h>
int main()
{
FILE *f;
f = fopen("Mytext.txt","w");
if(f)
{
fprintf(f, "hello, world!\n");
fclose(f);
}
else
{
printf("can not open the file!\n");
}
return 0;
}
通过指针访问FILE(结构体),得知所需要的信息,然后申请大量的内存来存放这些信息,通过读写方式对这些信息进行操作,结束后释放内存,关闭文件。
该程序很简单,就是在Mytext中写入hello,world! 若文件中没有该.txt,则会自动创建。
文本文件:
- 以每个字符占一个字节的格式存储,每个字节保存对应字符的ASCII码。
- 其实也是一种二进制文件
- 打开方式:
w 写文件,若文件不存在,则创建该文件;若已经存在,原来文件内容清空,以新写的内容取代原有内容。 r 读文件,若文件不存在,则报错;若已经存在,则打开文件,不会破坏其内容,担任有可能出错,eg:正在写,无法读。 a 添加,类似于w,但是若文件存在,原有内容仍然保留,追加新内容。(不常用) eg:日志 w+
主要写,允许读。
r+ 主要读,允许写。若文件不存在,报错;若文件存在,可以修改原有内容。 a+ 主要写(添加),允许读。 -
读写方式:(可以和一般的类比)
fprintf printf fscanf scanf fputc putchar fgetc getchar fputs puts fgets gets -
fscanf
#include <stdio.h> int main() { FILE *f; char a[1024]; f = fopen("Mytext.txt", "r"); if(f) { fscanf(f,"%s", &a); printf("%s",a);//puts(a); fclose(f); } else { printf("can not open the file!\n"); } return 0; }
结果:
Mytext中的内容是hello,空格world! ,但是由于fscanf()遇到空格后会结束,所以只输出hello,
注:%c 不会跳过空格,%s……会跳过空格读入,%c空格 无法结束输入,空格%c可以略过空格输入