# 第 10 章 文件
## 基础信息
文件:文件是存储在外部存储介质上数据的有序集合,是操作系统数据管理的单位。
同样的信息,保存为二进制比文本文件更节省空间。
![file](file.png)
缓冲文件系统与非缓冲文件系统
![buffer](buffer.png)
## 文件指针
在 “stdio.h” 文件中定义了文件类型 FILE 结构体:
```
struct _iobuf
{
char *_ptr; // 索引数据流内容的位置指针
int _cnt; // 当前的定位标志
char *_base; // 缓冲区基准位置
int _flag; // 文件操作方式
int _file; // 文件代号
int charbuf; // 字符缓冲信息
int _bufsiz; // 缓冲区大小
char *_tmpfname; // 临时文件名
}
// FILE 不是结构体变量的名称,而是类型名!
typedef struct _iobuf FILE;
```
对文件操作前,用户必须先定义文件类型指针变量,格式为:
```
FILE *结构体指针变量名;
// 举例:
FILE *fp;
```
## 文件操作
打开文件:
```
FILE *fp;
fp=fopen(文件名,文件的使用方式);
// 举例:
FILE *fp;
fp=fopen("a.txt", "r");
```
文件使用方式:
- "r" 以只读方式打开一个文件
- "w" 只写
- "+" 读写
- "a" 追加
- "b" 打开二进制
关闭文件:
- `fclose(文件指针)`
- 正常关闭文件,`fclose` 返回 0
- 关闭失败,返回 `EOF`
[例10.1](10.1.c)
## 文件操作大全
- 打开关闭:`fopen`, `fclose`
- 以字符为单位的读写:`fputc(ch, fp)`, `fgetc(fp)`
- 以字符串为单位的读写:`fputs(str, fp)`, `fgets(str, n, fp)`
- 判断到达文件尾函数:`feof()`
- 格式化方式读写文件:`fprintf(fp, 格式控制字符串, 输入列表)`, `fscanf(fp, 格式控制字符串, 输入列表)`
- 以数据块为单位读写:`fwrite(buffer, size, count, fp)`, `fread(buffer, size, count, fp)`
- 文件的定位函数:`rewind()`, `fseek()`, `ftell()`
---
## 文件读写
以字符为单位的读写:`fputc(ch, fp)`, `fgetc()`
```
// 写文件
fputc('a', fp);
// 读文件
ch=fgetc(fp);
```
`feof(fp)`, 测试文件是否到达了文件结尾,到达结尾返回 0,否则返回非 0.
[例10.2](10.2.c)
---
以字符串为单位的读写:`fputs()`, `fgets()`
[read-write-string](read-write-string.c)
---
格式化方式读写文件:`fprintf(fp, 格式控制字符串, 输入列表)`, `fscanf(fp, 格式控制字符串, 输入列表)`
`fprintf()` 的使用方式和 `printf` 类似,只不过 `printf` 输出到屏幕,`fprintf` 输出到文件,所以 `fprintf` 的第一个参数是文件指针.
举例:
```
fprintf(fp, "%d, %f", 1,2,3);
```
同理,`fscanf(fp, 格式控制字符串, 输入列表)` 的使用同 `scanf()`, 只不过是针对文件的。
```
fscanf(fp, "%d, %f", &a, &b);
```
---
以数据块为单位读写:`fwrite(buffer, size, count, fp)`, `fread(buffer, size, count, fp)`
- buffer: 指向要输出/输入数据库的首地址指针
- size: 每个要写/读的数据块大小(字节数)
- count: 要写/读的数据块个数
- fp: 文件指针
[以数据块为单位的代码实现](rw-buffer.c)
---
## 文件定位
文件的定位函数:`rewind()`, `fseek()`, `ftell()`
- `rewind(fp)`, 将文件指针移到到文件的开头
- `fseek(fp,位移量,起始点)`
- 位移量,表示移动的字节数
- 起始点,表示从何处开始计算位移量。
- `ftell(fp)`,返回文件指针离文件头的偏移量。当返回值为 -1 时表示出错。
开始计算位移量表示方法:
![file-offset.png](file-offset.png)
注意:从文件尾向文件头部移到时,位移量是负数!!!
[例10.9](example.10.9.c)
## 习题 P242
1. C
- A. EOF(值为-1),在文本文件中存储的是 ASCII,不可能出现 -1,所以可以使用 EOF 表示文件结尾。但是在二进制文件中不可使用 EOF。因为 -1 是合法的二进制数据。
2. C。(fp需要是指针类型)
3. C。非缓冲文件系统的缓冲区不由系统自动分配,而是用户自己设置。在 UNIX 中,一般使用缓冲文件系统处理文本文件,使用非缓冲文件系统处理二进制文件。
4. B。“w” 表示只写,只写是覆盖式写入。
5. A。“a”,append,表示追加。
6. D
7. A
8. B
9. C
10. D
没有合适的资源?快使用搜索试试~ 我知道了~
C语言程序设计-易晓梅.zip
共102个文件
c:74个
png:14个
md:7个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 99 浏览量
2024-11-28
16:01:30
上传
评论
收藏 4.21MB ZIP 举报
温馨提示
变量C语言全局变量的默认值是零值局部变量的默认值是随机的!本书以IBM PC为例:int占用2个字节。float占用4个字节第 4 章 阵列第 4 章 阵列考点选择排序冒泡排序第 5 章函数第 5 章函数考点递归二维码根据场景写代码。如Fibonacci、杨辉三角第 6 章 变量的作用与存储类别第 6 章 变量的作用与存储类别考点i++与的++i区别习题选择题1、3、4变量的存储类型static和6.3实例剖析, 6.3实例剖析第 7 章 编译预处理//todo。未做要求第 8 章 要点第 8 章 要点第 9 章 结构体、消耗体与枚举第 9 章 结构体、消耗体与枚举第 10 章 文件第 10 章 文件
资源推荐
资源详情
资源评论
收起资源包目录
C语言程序设计-易晓梅.zip (102个子文件)
9.9.c 3KB
9.8.c 2KB
exercise.3.c 2KB
9.7.c 1KB
exercise.2.c 1KB
5.10.c 813B
exercise.4.3.c 810B
exercise-3.c 723B
4.5.c 712B
5.11.c 660B
exercise.3.3.c 655B
5.9.c 610B
exercise.4.5.c 602B
exercise-1.c 592B
exercise.4.2.c 578B
exercise.2.c 534B
exercise.3.9.c 528B
4.1.c 524B
exercise-5.c 513B
exercise.3.7.c 496B
4.7.c 488B
8.22.c 469B
exercise-4.c 466B
exercise.3.4.c 456B
selection-sort.c 443B
4.2.5.c 436B
exercise.4.6.c 431B
exercise.3.6.c 429B
10.2.c 412B
5.12.c 401B
exercise-2.c 388B
bubble-sort.c 379B
exercise.3.2.c 371B
10.1.c 367B
9.11.c 363B
read-write-string.c 363B
rw-buffer.c 346B
4.2.4.c 338B
8.29.c 337B
exercise.1.c 334B
exercise.3.1.c 331B
4.2.c 327B
exercise.4.4.c 321B
4.8.c 320B
exercise-6.c 319B
5.3.c 315B
exercise.3.5.c 312B
verification.1.12.c 290B
exercise.3.10.c 278B
5.8.c 267B
example.10.9.c 264B
exercise.4.1.c 244B
4.6.c 243B
example.calloc.c 222B
example.malloc.c 220B
exercise.3.8.c 215B
exercise.1.3.c 211B
exercise.3.1.c 210B
5.1.c 196B
4.3.strcmp.c 184B
4.3.strlwr-strupr.c 175B
verification.1.7.c 166B
verification.1.5.c 164B
verification.1.10.c 163B
verification1.2.c 159B
4.3.strcat.c 150B
5.2.c 148B
4.3.strlen.c 141B
verification.1.4.c 136B
4.3.strcpy.c 130B
4.3.gets-puts.c 129B
verification.1.8.c 115B
verification.1.11.c 112B
verification.1.6.c 102B
.gitignore 13B
settings.json 631B
Makefile 72B
README.md 4KB
README.md 4KB
README.md 2KB
README.md 2KB
README.md 2KB
README.md 1KB
README.md 844B
union.png 1.31MB
4.3.2-形参和实参.png 634KB
6.2.png 373KB
4.png 344KB
3.4-8.png 320KB
chian.png 268KB
file.png 254KB
file-offset.png 213KB
3.9-12.png 206KB
exercise.2.png 185KB
4.2.1多维数组存储.png 174KB
buffer.png 149KB
5.12.png 57KB
3.3..png 37KB
资源内容.txt 792B
write.txt 12B
共 102 条
- 1
- 2
资源评论
赵闪闪168
- 粉丝: 1633
- 资源: 4239
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功