C语言文件操作

什么是文件
文件有不同类型,在程序设计中,主要用到两种文件:
1.程序文件。包括源程序文件(后缀为.c),目标文件(后缀为.obj),可执行文件(后缀为.exe)等。
2.数据文件。文件的内容不是程序,而是供程序运行时读写的数据,如在程序运行过程中输出到磁盘(或其他外部设备)的数据,或在程序运行中供读入的数据。

文件名
一个文件要有一个唯一的文件标识,以便用户识别和引用。
文件标识包括三部分:文件路径,文件名主干,文件后缀。
文件路径表示文件在外部存储设备中的位置。

文件的分类
根据数据的组织形式,数据文件被称为文本文件或者二进制文件。
数据在内存中以二进制的形式存储,如果不加转换的输出到外存,就是二进制文件。
如果要求在外存上以ASCII码的形式存储,则需要在存储前转换。以ASCII字符的形式存储的文件就是文本文件。

文件缓冲区
ANSIC 标准采用“缓冲文件系统”处理的数据文件的,所谓缓冲文件系统是指系统自动地在内存中为程序中每一个正在使用的文件开辟一块“文件缓冲区”。从内存向磁盘输出数据会先送到内存中的缓冲区,装满缓冲区后才一起送到磁盘上。 缓冲区的大小由各个具体的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;

不同的C编译器的FILE类型包含的内容不完全相同,但是大同小异。

下面我们可以创建一个指向文件型数据的指针变量:
FILE* pf;//文件指针变量
定义pf是一个指向FILE类型数据的指针变量。可以使pf指向某个文件的文件信息区(是一个结构体变量)。通过该文件信息区中的信息就能访问该文件。

打开与关闭文件
文件在读写之前应该先打开文件,在使用结束之后应该关闭文件。
ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。
FILE * fopen ( const char * filename, const char * mode );
fopen(文件名, 使用文件方式);
int fclose ( FILE * stream );
fclose(文件指针);

文件的顺序读写
fgetc
调用形式:fgetc(fp)
功能:从fp指向的文件读入一个字符。
返回值:读成功,带回所读的字符,失败返回EOF。
fputc
调用形式:fputc(ch, fp)
功能:把ch写到文件指针变量fp所指向的文件中。
返回值:成功返回输出的字符,失败返回EOF。
字符串
fgets(str, n, fp);
fputs(str, fp);
格式化
读写对象是文件,而不是终端。
fprintf(文件指针,格式化字符,输出列表);
fscanf(文件指针,格式化字符,输入列表);
二进制
输入输出数据块
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
buffer:地址。 size:要读写的字节数。
count:要读写的数据项。 fp:FILE类型指针。

文件的随机读写
fseek 根据文件指针的位置和偏移量来定位文件指针。
int fseek(FILE* stream, long int offset, int origin);

ftell 返回文件指着相对于起始位置的偏移量。
long int ftell(FILE* stream);

rewind 让文件指针的位置回到文件的起始位置。
void rewind(FILE* stream);

文件结束判定
被错误使用的 feof
牢记:在文件读取过程中,不能用feof函数的返回值直接用来判断文件的是否结束。而是应用于当文件读取结束的时候,判断是读取失败结束,还是遇到文件尾结束。

  1. 文本文件读取是否结束,判断返回值是否为EOF (fgetc),或者NULL(fgets)
    fgetc判断是否为EOF.
    fgets判断返回值是否为NULL.
  2. 二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。
    fread判断返回值是否小于实际要读的个数。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页