💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] # 文件的打开和关闭 ## 文件指针 在c语言中用一个指针变量指向一个文件,这个指针称为文件指针 ~~~ typedef struct { short level; //缓冲区满或者空的程度 unsigned flags; //文件状态标志 char fd; //文件描述符 unsigned char hold; //如无缓冲区不读取字符 short bsize; //缓冲区的大小 unsigned *buffer; //数据缓冲区的位置 unsigned ar; //指针,当前的指向 unsigned istemp; //临时文件,指示器 short token; //用来有效性的检查 }FILE; ~~~ FILE是系统使用typedef定义出来的有关文件信息的一种结构体类型,**结构中含有文件名,文件状态和文件当前位置等信息** ## 文件的打开fopen 任何文件使用之前必须打开 ~~~ #include<stdio.h> FILE * fopen(const char * filename, const char * mode); 功能: 打开文件 参数: filename: 需要打开的文件名,根据需要加上路径 mode: 打开文件的模式设置 返回值: 成功: 文件指针 失败: NULL ~~~ ~~~ int main() { FILE * fp = fopen("D://code/a.txt", "r"); if (fp == NULL) { //1.找不到 2.没有权限 3.程序打开超出上限 printf("文件打开失败\n"); return -1; } //文件操作 printf("文件打开成功\n"); //文件关闭 fclose(fp); system("pause"); return 0; } ~~~ 第二个参数的几种形式(打开文件的方式) ![](https://box.kancloud.cn/af62ba09d4866df60a46453315848f8e_983x339.png) ![](https://box.kancloud.cn/088b635cd1792b585c3e4e53f5305788_714x160.png) 注意: * b是二进制模式的意思,b只在windows有效,在linux用r和rb的结果是一样的 * unix和linux下所有的文本文件行都是\n结尾,而windows所有的文本文件行都是\r\n结尾 * 在windows平台下,以"文本"方式打开文件,不加b: 当读取文件的时候,系统会将所有的"\r\n"转换为"\n" 当写入文件的时候,系统会将"\n"转换为"\r\n"写入 以"二进制"方式打开文件,则读写都不会进行这样的转换 * 在unix/linux平台下,"文本"与"二进制"模式没有区别,"\r\n"作为两个字符原样输入输出 整体来说,文件打开方式由 `r、w、a、t、b、+ `六个字符拼成,各字符的含义是: * r(read):读 * w(write):写 * a(append):追加 * t(text):文本文件 * b(banary):二进制文件 * +:读和写 # 关闭文件 文件一旦使用完毕,应该用 fclose() 函数把文件关闭,以释放相关资源,避免数据丢失。fclose() 的用法为: ~~~ int fclose(FILE *fp); ~~~ fp 为文件指针。例如: ~~~ fclose(fp); ~~~ 文件正常关闭时,fclose() 的返回值为0,如果返回非零值则表示有错误发生