文件IO
一、C语言文件指针
文件指针是C语言中用于操作文件的核心概念,本质是一个指向FILE
结构体的指针。该结构体由标准库定义(位于stdio.h
),包含文件描述符、缓冲区状态、文件位置指针等元数据。
特性与作用:
- 句柄功能:通过
fopen
返回的FILE*
指针作为文件操作的唯一标识,所有读写函数(如fprintf
、fread
)均需通过此指针访问文件。 - 缓冲区管理:文件指针关联的缓冲区由系统自动管理,减少频繁的磁盘I/O操作,提升效率。
- 错误检测:若文件打开失败(如路径错误),
fopen
返回NULL
,需通过判断指针有效性避免后续操作崩溃。
二、fopen
的mode
参数详解fopen
函数原型为:
c
FILE* fopen(const char* filename, const char* mode);
mode
参数决定文件的打开方式和操作权限,具体模式如下:
基本模式
模式 说明 "r"
只读模式,文件必须存在 "w"
只写模式,文件存在则清空内容;不存在则新建 "a"
追加模式,在文件末尾写入数据,文件不存在则新建 读写组合模式
模式 说明 "r+"
读写模式,文件必须存在,可任意位置读写 "w+"
读写模式,文件存在则清空内容;不存在则新建 "a+"
读写追加模式,可读取文件,但写入仅在末尾追加 二进制模式(
b
后缀)
在基础模式后添加b
(如"rb"
、"wb+"
),表示以二进制方式操作文件,适用于非文本数据(如图片、音频)。区别:- 文本模式:自动处理换行符(如Windows中
\r\n
转换为\n
)。 - 二进制模式:直接读写原始字节,无转换。
- 文本模式:自动处理换行符(如Windows中
C11新增模式(
x
后缀)
如"wx"
、"wbx"
,特点:- 若文件已存在,则打开失败(避免意外覆盖)。
- 支持独占访问(其他进程无法同时操作)。
三、使用示例与注意事项
示例代码:
cFILE *fp = fopen("data.txt", "r+"); if (fp == NULL) { perror("Error opening file"); exit(1); } // 读写操作... fclose(fp);
注意事项:
- 文件路径:使用绝对路径时需注意转义(如
C:\\file.txt
)。 - 模式冲突:
"w"
和"w+"
会清空文件内容,需谨慎选择。 - 资源释放:操作完成后必须调用
fclose
关闭文件,防止内存泄漏]。
- 文件路径:使用绝对路径时需注意转义(如
四、适用场景推荐
- 文本处理:优先使用
"r"
、"w"
等文本模式。 - 跨平台二进制文件:使用
"rb"
、"wb"
确保兼容性]。 - 日志追加:选择
"a"
或"a+"
模式避免覆盖历史数据]。
通过合理选择mode
参数,可实现灵活高效的文件操作。具体模式组合需根据实际读写需求及文件类型决定]。