- 文件的分类
- ASCLL 文件(文本文件),每个字节放一个字符的 ASCLL 代码
- 二进制文件
- 文件缓冲区,不管是从内存到磁盘,还是从磁盘到内存,到需要让数据先传输并停留在这二者之间的缓冲区中。缓冲区的作用是减少对磁盘的访问频率,因为 IO 操作的速度相比于 CPU 的速度是很慢的(大概几十微秒)
- 文件的打开
- fopen 函数,其中第二个参数是打开方式,详见参考书目(注意,只有 w 是在文件不存在时新建文件)
- 不能打开则返回空指针,能打开则返回该文件被调入内存中的地址(指针)
- 文件的关闭
- fclose 用于文件的关闭,其步骤是,将缓冲区的内容全部送入磁盘,然后撤销文件信息区和缓冲区
- 成功则返回 0,否则返回 EOF
- 文件的读写(2,3)
// 1
#include <stdio.h>
int main()
{
FILE *fp;
fp = fopen("filedemo02.txt","w");
if(fp!=NULL)
printf("打开成功!");
fclose(fp);
return 0;
}
// 2 读写一个字符实例
#include <stdio.h>
int main()
{
FILE *fp,*fp2;
fp = fopen("filedemo02.txt","w");
fp2 = fopen("filedemo02.txt","r+");
if(fp!=NULL)
printf("打开成功!\n");
// 写一个字符
char wreturn = fputc('c',fp);
printf("写入的字符:%c\n",wreturn);
// 写完后要马上关闭
fclose(fp);
// 读一个字符
char rreturn = fgetc(fp2);
if(rreturn != EOF)
printf("读入的字符:%c\n",rreturn);
else
printf("读取失败");
fclose(fp2);
return 0;
}
// 3 读一个字符串
#include <stdio.h>
int main()
{
int i=0;
FILE *fp;
fp = fopen("filedemo02.txt","r");
char string[100];
fgets(string,100,fp);
while(string[i]!='#')
printf("%c",string[i++]);
return 0;
}
// 3 写一个字符串
#include <stdio.h>
int main()
{
int i=0;
FILE *fp;
fp = fopen("filedemo02.txt","w");
char *string = "这是一个字符串";
fputs(string,fp);
return 0;
}
【注】fopen(“c:\project\test1.dat”,”r”),这样的写法是错误的,因为会把 \t 看作一个被转义的字符,所以我们应该这么去书写 fopen(“c:\project\test1.dat”,”r”)