一、文件:程序运行时,必须先把文件数据从硬盘加载到内存
1、文本文件:数据已ASCII码的形式存放,即每个码代表一个字符。
2、二进制文件:数值型数据是以二进制的形式存放的,把内存中的数据按照其在内存中的形式存放。其存放数据的效率较高。当文件中含有大量数据类型时,推荐使用二进制文件。
3、文件的写入与读出约定为同一中文件格式。
4、缓冲文件系统:c语言采用了该系统。指:系统自动在内存区为每一个正在使用的文件开辟一个缓冲区,先将需要读写的数据收集到缓冲区中,然后在缓冲区中读取数据,直到读完;写数据则相反,先往缓冲区写入数据,写满以后,把缓冲区的数据移送到文件中,再重复操作。
二、文件的打开与关闭,读写
stdio.h 中定义了一个结构体类型:FILE。它包含了很多文件操作
1、指定格式读取文件:
新建haha.txt:
//先在同一目录下建立haha文本文件 ,指定类型%d文件,即文件中的数据全是整型
#include<stdio.h> //包含了文件结构体FILE
#include<conio.h>
#include<process.h> //exit 本来在stdlib中,后来出现了多线程,process也有了
main() {
FILE *P1,*P2; //定义了指向FILE结构体类型的结构体指针
int t,n=0,x[20];
P1=fopen("haha.txt","r"); //以 r 的方式打开文件,只读
//若指定路径名,注意使用 // 符号,其中一个表示转义
//并使指针P1指向该文件
if(P1==NULL){
printf("文件打开失败,退出程序");
exit(0); //exit()函数能够关闭所有文件,终止程序
}
//格式化读取:c语言允许指定格式读取文件
while(!feof(P1)) { //feof函数在头文件stdio.h中,用于判断文件是否结束
fscanf(P1,"%d",&t);//从P1所指向的文件中读取整形数据并赋值给t
x[n++]=t; //先用再加
}
fclose(P1); //使用完文件后必须关闭文件
P2=fopen("ha.txt","w"); //以 w 的方式打开文件 【w(只写):如果没有该文件,则新建一个 】
for(int j=0;j<n;j++){ //前面的n已经在退出循环时加了1,这里就不能写成 j<=n
fprintf(P2,"%4d",x[j]); //加冒号
}
fclose(P2);
}
输出到ha.txt文件: