目录
前言
文件在我们生活中处处可见,大部分人或多或少都接触过一些文件,例如,我们写的文章就是以文件的形式保存在电脑的磁盘或者我们的移动硬盘(U盘)中,用数码相机拍照,每一张照片都是一个文件。当我们需要时,就得读取文件中的信息。
一、什么是文件
文件 一般指存储在外部介质上的数据的集合。我们平时存储在磁盘上的文件就是常见的。
1、流(数据流)
输入输出信息的过程,信息如流水一样从一端流向另一端,因此称之为流(数据流)。
流表示信息从源到目的端的流动,输入时,数据从文件流向计算机内存;输出时,数据从计算机流向文件。
2、文件的分类
数据文件可以分为ASCII文件(文本文件)和二进制文件。
数据在磁盘上存储形式,字符以ASCII形式存储,数值型数据既可以用ASCII形式存储也可以用二进制形式存储。
3、文件缓冲区
内存向磁盘中输出的数据需要先送到内存中的缓冲区,在缓冲区装满之后,才一起送到磁盘中。从磁盘中想计算机输入数据也是先把数据放到缓冲区,然后再逐个的从缓冲区把数据送入程序数据区,输入输出共用一个缓冲区。(知道缓冲区是什么就可以)
4、文件类型指针
每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件你的有关信息(文件的名字、文件状态、文件的当前位置等)。这些信息保存在一个结构体中。如stdio.h中文件类型声明如下
type struct
{
short level; //缓冲区满或空的程度
unsigned flags; //文件描述状态
char fd; //文件描述符
unsigned char hold; //如缓存区为内容不读取字符
short bsize; //缓冲区的大小
unsigned char *buffer; //数据缓冲区的位置
unsigned char *curp; //文件位置标记当前指针当前的指向
unsigned istemp; //临时文件指示器
short token; //用于有效性检查
}FILE;
下面定义一个指针变量
FILE *fp; //定义fp是指向FILE类型的指针变量
可以是fp指向文件的信息区,通过文件信息区的信息就能够访问文件
二、文件的关闭打开
“打开”就是为文件建立相应的信息区(用来存放文件相关信息)和文件缓冲区(用来暂时存放输入输出的数据)。一般在打开文件的同时,一般都制定一个指针变量指向文件,这样就可以对文件进行读写了。
“关闭”就是撤销文件信息区和文件缓冲区,使文件指针不再指向该文件,就无法对文件进行读写了
1、fopen函数打开文件
fopen(文件名,使用文件的方式);
如
fopen("her","r");
// 该句子就表示读儒文件名为和her的文件。
fopen函数的返回值是指向该文件的指针即该文件的信息区的起始地址。通常将fopen的返回值赋给一个指向文件的指针变量。
FILE *fp; //定义一个指向文件的指针变量
fp = fopen("her","r"); //将fopen的返回值赋给指针变量fp
2、fclose函数关闭数据文件
fclose(文件指针);
如
fclose(fp);
如果不关闭文件就结束程序运行将会丢失数据,因为,在向文件写入数据时,先将数据输出到缓冲区,缓冲区放满之后才正式输出给文件,如果当数据还在缓冲区的时关闭程序,就可能使缓冲的数据丢失。用fclose关闭文件,可以把缓冲区的数据输出到磁盘文件,再撤销文件信息区。
三、读写数据文件
1、文件的写入
(1)对文件输出一个字符
fputc(字符c,文件指针fp); //把字符c写入到指针变量fp所指的文件中
(2)对文件输出一个字符串
fputs(字符串str,文件指针fp); //把文件指针所指向的字符串写入到fp所指向的文件中
#include <stdio.h>
int main()
{
FILE *fp;
char str[4][10];
int i;
for(i=0;i<4;i++)
{
gets(str[i]); //把单词写入字符串str中
}
fp = fopen("E:\\CC\\one.dat","w"); //打开磁盘文件,我是要在E盘中CC文件夹的中写入,运行之后就会发现你的硬盘里有了一个文件
for(i=0;i<4;i++)
{
fputs(str[i],fp);fputs("\n",fp); //在磁盘文件写入一个字符串,然后输出一个和换行符
printf("%s\n",str[i]); //在屏幕上显示
}
fclose(fp); //关闭文件
return 0;
}
2、文件的读取
(1)从文件读取字符
fgetc(文件指针); //从fp指向的文件中读取一个字符 ,如FILE *fp; fgetc(fp);
(2)从文件读取字符串
fgets(数组str,读入长度n,文件指针fp); //从fp指向的文件读取长度为(n-1)的字符串存入数组str中并在最后加一个字符 '\0';
//现在把刚刚存入的四个字符串取出来
#include <stdio.h>
int main()
{
FILE *fp;
char str[4][10];
int i;
fp = fopen("E:\\CC\\one.dat","r"); //打开上面保存的文件
for(i = 0;i<4;i++)
{
fgets(str[i],10,fp); //读取10个字节文件指针指向的文件中的数据,存入数组中
printf("%s\n",str[i]);
}
fclose(fp); //关闭文件
return 0;
}