一、概述
定义
说起文件,是指一组相关数据的有序集合。这些数据集的名称叫做文件名。文件通常是存放在外部介质上的,操作系统也是以文件为单位对数据进行管理的,每一个文件都通过唯一的“文件标识”来定位,即文件路径和文件名,当想要使用文件的时候,需要将文件调入内存中。
文件的分类
1、 从用户使用的角度看:普通文件和设备文件;
2、 从文件编码和数据的组织方式来看:ASCII码文件和二进制码文件;
3、 从C语言对文件的处理方法来看:缓冲文件系统和非缓冲文件系统;
二、文件操作
FILE结构体内部组成
typedef struct
{
short level; //缓冲区满或空的程度
unsigned flags; //文件状态标识
char fd; //文件描述符
unsigned char hold; //无缓冲区不读取字符
short bsize; //缓冲区大小
unsigned char *buffer; //缓冲区位置指针
unsigned char *curp; //当前指针指向
unsigned istemp; //临时文件指示器
short token; //用于有效性检查
}FILE;
文件操作方式
1、"r".为读而打开文本文件.(不存在则出错)
2、"rb".为读而打开二进制文件.
3、"w".为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)
4、"wb".为写而打开二进制文件.
5、"a".为在文件后面添加数据而打开文本文件.(若不存在,则新建;反之,在原文件后追加)
6、"ab".为在文件后面添加数据而打开一个二进制文件.
最常用的文件使用方式及其含义如下:
7、"r+".为读和写而打开文本文件.(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)
8、"rb+".为读和写而打开二进制文件.只是在随后的读写时,可以由位置函数设置读和写的起始位置.
9、"w+".首先建立一个新文件,进行写操作,随后可以从头开始读.(若文件存在,原内容将全部消失)
10、"wb+".功能与"w+"同.只是在随后的读写时,可以由位置函数设置读和写的起始位置.
最常用的文件使用方式及其含义如下:
11、"a+".功能与"a"相同;只是在文件尾部添加新的数据后,可以从头开始读.
12、"ab+".功能与"a+"相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置.
13、“rt” 只读打开一个文本文件,只允许读数据
14、“wt” 只写打开或建立一个文本文件,只允许写数据
15、“at” 追加打开一个文本文件,并在文件末尾写数据
16、“rb” 只读打开一个二进制文件,只允许读数据
17、“wb” 只写打开或建立一个二进制文件,只允许写数据
18、“ab” 追加打开一个二进制文件,并在文件末尾写数据
19、“rt+” 读写打开一个文本文件,允许读和写。用fseek确定读写位置,写多少覆盖多少,后面的内容保留。因为磁盘空间是连续的,所以你不能在中间插入,在中间一旦写入就是覆盖与写入内容等长的那些内容。
20、“wt+” 读写打开或建立一个文本文件,允许读写
21、“at+” 读写打开一个文本文件,允许读,或在文件末追加数据
22、“rb+” 读写打开一个二进制文件,允许读和写
23、“wb+” 读写打开或建立一个二进制文件,允许读和写
24、“ab+” 读写打开一个二进制文件,允许读,或在文件末追加数据
一个简单的文件读写程序
#include<stdio.h>
int main()
{
FILE *fp,*fp2; //定义文件指针
if((fp=fopen("C:/read.txt","r"))==NULL) //打开将要读的文件
{
printf("error!");
}
else
printf("open read success!\n");
if((fp2=fopen("C:/write.txt","w"))==NULL) //打开将要写的文件
{
printf("error!");
}
else
printf("open write success!\n");
char ch;
while((ch=fgetc(fp))!=EOF) //直到文件末尾为止一直写(!feof(fp))
{
putchar(ch);
fputc(ch,fp2); //写到第二个文件里
}
fclose(fp);
fclose(fp2);
return 0;
}