C语言(六)

文件

  • 文件的定义:文件是一组有关数据的有序集合
  • 操作系统是以文件为单位对数据进行管理的

文件的分类

从用户观点

特殊文件(标准输入输出文件或标准设备文件)

普通文件(磁盘文件)

从操作系统的角度看

从操作系统的角度看,每一个与主机相连的输入、输出设备都看作是一个文件

按数据的组织形式

ASCII文件(文本文件)

每一个字节放一个ASCII代码

二进制文件

把内存的数据按其在内存中的存储形式原样输出到磁盘上存放

C语言对文件的处理

缓冲文件系统

系统自动地在内存区为每一个正在使用的文件开辟一个缓冲区。用缓冲文件系统进行的输出输入又称为高级磁盘输出输入。

非缓冲文件系统

系统不自动开辟确定大小的缓冲区,而由程序为每个文件设定缓冲区。用非缓冲文件系统进行的输出输入又称为低级输入输出系统。

注: 在ANSI C标准中只采用缓冲文件系统来处理文本文件和二进制文件,C语言对文件的读写都是用库函数实现的

文件的基本操作

文件型指针型变量

FILE * fp;//fp是一个指向FILE类型结构体的指针变量

FILE类型的数组

FILE f[5];定义了一个结构体数组f,可以用来存放5个文件的信息

打开文件

FILE * fp;
fp = fopen(文件名,使用文件方式);//文件名加上路径

文件使用方式

  • r (只读)为输入打开一个文本文件
  • w (只写)为输出打开一个文本文件
  • a (追加)向文本文件尾增加数据
  • rb (只读)为输入打开一个二进制文件
  • wb (只写)为输出打开一个二进制文件
  • ab (追加)向二进制文件尾增加数据
  • r+ (读写)为读/写打开一个文本文件
  • w+ (读写)为读/写建立一个新的文本文件
  • a+ (读写)为读/写打开一个文本文件
  • rb+ (读写)为读/写打开一个二进制文件
  • wb+ (读写)为读/写建立一个新的二进制文件
  • ab+ (读写)为读/写打开一个二进制文件

注: 1. 凡是”r”打开一个文件时,该文件必须已经存在,且只能从该文件中读出
2. 用”w”打开的文件只能向该文件中写入,若打开的文件不存在,则以指定的文件名建立该文件,若文件已存在,则将该文件删除,重建一个新文件
3. 若要向一个已存在的文件追加新的信息,只能用”a”的方式打开文件。但此时该文件必须是存在的,否则会出错。
4. 用只写或读写方式打开一个已存在文件时将清除原文件的内容,写入字符从文件首开始。如需保留原有文件内容,希望写入的字符以文件末开始存放,必须以追加的方式打开文件,被写入的文件若不存在,则创建该文件。

关闭文件

fclose(文件指针);//使文件指针变量不再指向该文件,若成功返回0,否则返回-1

文件的读写操作

字符输入输出函数

fputc()
fputc(ch,fp);//将字符(ch的值)输出到fp所指的文件中去

注:

fgetc()
ch = fgetc(fp);//从打开的文件fp中读取一个字符并送入ch中

注:1. 在fgetc()函数调用中,读取的文件必须是以读或写的方式打开的
2.使用fgetc()函数后,该位置指针(文件内部指针,与文件指针不同)向后移动一个字节,因此可连续多次使用fgetc()函数读取多个字符

字符串读写函数

fgets()
fputs()
# include <stdio.h>
int main(void)
{
    char str[20];  /*定义一个最大长度为19, 末尾是'\0'的字符数组来存储字符串*/
    printf("请输入一个字符串:");
    fgets(str, 19, stdin);  /*从输入流stdin中读取19个字符到字符数组str中*/
    fputs(str, stdout);  //将字符数组的内容输出到输出流stdout中
    return 0;
}

注:stdin/stdout是标准输入/输出流,即屏幕输入/输出

数据块读写函数

fread()
fwrite()

格式化读写函数

fscanf()
fprintf()
int fscanf ( FILE *fp, char * format, ... );
int fprintf ( FILE *fp, char * format, ... );
//举例
FILE *fp;
int i, j;
char *str, ch;
fscanf(fp, "%d %s", &i, str);
fprintf(fp,"%d %c", j, ch);

   转载规则


《C语言(六)》 fightingtree 采用 知识共享署名 4.0 国际许可协议 进行许可。
  目录