Lesson26 PoEdu培训第二课 C语言篇(18) 文件处理函数
文章类别: 培训笔记 0 评论

Lesson26 PoEdu培训第二课 C语言篇(18) 文件处理函数

文章类别: 培训笔记 0 评论

文件处理函数

思维导图

Alt 前置代码

文件处理函数

fopen

r 只读模式, 不会新建不存在文件
w 只写模式, 会新建不存在文件, 文件存在会清空内容, 写入新的内容.
a 追加模式, 只写, 会新建不存在文件, 文件存在不会清空内容, 会在文件末尾追加新内容.
更新模式 比如a+, r+, w+, rb, ra, rw, abx+ 等等, 可任意组合r w a任意一个.

+ 读写模式.
b 二进制模式, 以二进制方式打开和处理文件.
x 独占模式(新标准支持), 打开后其他程序不能使用.

更新模式不会改变其特性, 只会改变模式, 比如 r+ 仍然不能新建不存在文件.
返回值为FILE*, 它是我们用来操作的文件缓冲区, 注意, 是缓冲区而不是直接操作的文件.

fclose

关闭文件缓冲区

getc

char getc(FILE* stream) 从文件缓冲区中读取一个字符
返回读取到的字符, 或者EOF

fseek  ftell

fseek(FILE* stream, long offset, int whence) 移动游标

offset 移动的游标数
whence 游标移动的位置, 包括 SEEK_SET(文件头开始), SEEK_CUR(当前文件游标开始), SEEK_END(文件尾开始)
需要注意的是, SEEK_END的时候, offset需要为负数, 不然会出现不可预知的问题.

ftell(FILE* stream) 获取当前游标数

文本模式下需要注意, 在使用ftell的时候, Windows平台一个换行占用2个游标('\r', '\n', Linux平台一个换行占用1个游标('\n')
但是, 我们的getc在读取的时候, 会忽略'\r'.
putc

putc(char ch) 输出一个字符到文件中

作业

在文本模式下, 以f系函数(fgets, fputs...)完成如下作业, 不能使用标准输入输出流函数.
1. 让用户输入文件名(.txt结尾), 按文件的目录建立当前文件名的文档, 随后让用户输入信息, 每次只保存本次信息.
2. 让用户输入文件名(.txt结尾), 如果文件不存在就建立该文件, 如果文件存在则覆盖写入之后用户输入的信息.
3. 让用户输入文件名(.txt结尾), 如果文件存在则创建一个同名的.bak文件, 
    在bak文件中追加保存用户输入的信息, 输入#结束输入,
    输入结束后打印bak的信息, 然后要求用户确认.
    用户确认后, 将bak中的信息覆盖至源文件.   

如有错误,请提出指正!谢谢.

回复