目录
一、文件概述
(1)文件定义
(2)文件命名
(3)文件分类
① 按照文件的内容划分
② 按照文件的组织形式划分
③ 按照文件的存储形式划分
④ 按照文件的存储介质划分
(4)文件存取方式
(5)文件系统
二、文件的打开和关闭函数
(1)文件打开函数
① 库函数 exit() 的具体说明
② 文件使用中各字符的含义
字符 | 含义 |
---|---|
r (read) | 读 |
w (write) | 写 |
a (append) | 追加 |
t (text) | 文本文件(可省略不写) |
b (binary) | 二进制文件 |
+ | 读和写 |
③ 文件的使用方式说明
文本类型 | 字符 | 使用方式 | 说明 |
文本文件 | "r" | 只读 | 以只读方式打开一个已经存在的文本文件,只允许读取数据,不允许写入数据 |
"r+" | 读/写 | 以读/写方式打开一个已经存在的文本文件,允许读取和写入数据 | |
"w" | 只写 | 以只写方式打开一个文本文件,只允许写入数据,不允许读取数据: ① 若文件已经存在,则删去原文件的所有内容,然后写入数据 ② 若文件不存在,则自动创建一个新文件后写入数据 | |
"w+" | 读/写 | 以读/写方式打开一个文本文件,允许读取和写入数据: ① 若文件已经存在,则删去原文件的所有内容,然后写入数据 ② 若文件不存在,则自动创建一个新文件后写入数据 | |
"a" | 追加 | 以追加的方式打开一个已经存在的文本文件,只允许写入数据并追加到原文件尾 | |
"a+" | 读/写 | 以读/写方式打开一个文本文件,允许读取数据,也允许写入数据到文件尾: 若文件不存在,则自动创建一个新文件 | |
二进制文件 | "rb" | 只读 | 以只读方式打开一个已经存在的二进制文件,只允许读取数据,不允许写入数据 |
"rb+" | 读/写 | 以读/写方式打开一个已经存在的二进制文件,允许读取和写入数据 | |
"wb" | 只写 | 以只写方式打开一个二进制文件,只允许写入数据,不允许读取数据: ① 若文件已经存在,则删去原文件的所有内容,然后写入数据 ② 若文件不存在,则自动创建一个新文件后写入数据 | |
"wb+" | 读/写 | 以读/写方式打开一个二进制文件,允许读取和写入数据: ① 若文件已经存在,则删去原文件的所有内容,然后写入数据 ② 若文件不存在,则自动创建一个新文件后写入数据 | |
"ab" | 追加 | 以追加的方式打开一个已经存在的二进制文件,只允许写入数据并追加到原文件尾 | |
"ab+" | 读/写 | 以读/写方式打开一个二进制文件,允许读取数据,也允许写入数据到文件尾: 若文件不存在,则自动创建一个新文件 |
(2)文件关闭函数
(3)标准设备文件的打开和关闭
① 文件的打开与关闭
② 文件的打开(fopen 函数)
字符 | 处理方式 | 指定文件不存在 | 文件存在 |
r | 只读 | 出错 | 正常 |
w | 只写 | 建立新文件 | 原内容丢失 |
a | 追加 | 建立新文件 | 在原内容后追加 |
r+/w+ | 读写 | 出错 | 正常 |
③ 文件的关闭(fclose 函数)
三、文件的读/写函数
(1)文件尾测试函数
(2)写字符函数 fputc()
(3)读字符函数 fgetc()
① fputc 函数(putc 函数)
② fgetc 函数(getc 函数)
③ feof 函数
/* 示例:从键盘输入一些字符,逐个把它们送到磁盘上去,直到输入一个 “#” 为止 */
#include <stdio.h>
#include <stdlid.h>
void main()
{
FILE *fp;
char ch , filename[10];
scanf("%s", filename);
if((fp=fopen(filename, "w"))==NULL)
{
printf("cannot open file\n");
exit(0);
} /* 终止程序 */
ch=getchar(); /* 接收执行scanf时最后输入的回车符 */
ch=getchar(); /* 第一个输入的字符被赋给变量ch */
while(ch!='#')
{
fputc(ch, fp); /* 字符被写入filename表示的文件中 */
putchar(ch); /* 字符被输出到显示器 */
ch=getchar();
}
putchar(10); /* 向屏幕输出一个换行符 */
fclose(fp);
} /* 关闭文件 */
(4)写字符串函数 fputs()
(5)读字符串函数 fgets()
/* 示例:从键盘读入字符串存入文件,再从文件读回显示 */
#include<stdio.h>
void main()
{
FILE *fp;
char string[81];
if((fp=fopen("file.txt", "w"))==NULL)
{
printf("cann't open file"); exit(0);
}
while(strlen(gets(string))>0)
{
fputs(string, fp);
fputs("\n", fp);
}
fclose(fp);
if((fp=fopen("file.txt", "r"))==NULL)
{
printf("cann't open file"); exit(0);
}
while(fgets(string, 81, fp)!=NULL)
fputs(string, stdout);
fclose(fp);
}
(6)写数据块函数 fwrite()
(7)读数据块函数 fread()
(8)格式化写函数 fprintf()
(9)格式化读函数 fscanf()
四、文件的定位函数
(1)文件指针复位函数
① rewind 函数
/* 示例:对一个磁盘文件进行显示和复制两次操作 */
#include <stdio.h>
void main()
{
FILE *fp1,
*fp2;
fp1=fopen("c:\\c\\user\\ch4.c", "r");
fp2=fopen("d:\\c\\user\\ch41.c", "w");
while(!feof(fp1)) putchar(fgetc(fp1));
rewind(fp1);
while(!feof(fp1)) putc(fgetc(fp1), fp2);
fclose(fp1); fclose(fp2);
}