打开文件 & 关闭文件
打开文件
需要文件指针
接收;关闭文件
需要传入文件指针
FILE *fp; // 定义文件指针
打开文件
使用到的函数
fopen()
#include <stdio.h> FILE *fopen(const char *path, const char *mode);
参数
参数 | 含义 |
---|---|
*path | 文件的路径,支持相对路径 、绝对路径 |
*mode | 指定文件打开的模式:r 、w 、a 、r+ 、w+ 、a+ b :以二进制形式打开文件,可以与上面的6种结合("rb", "wb", "ab", "r+b", "w+b", "a+b" ) |
返回值
- 打开成功,则返回一个
指向 FILE结构的 文件指针
; - 打开失败,则返回
NULL
并设置errno
为指定的错误。
打开文件模式
文件打开模式 | 说明 |
---|---|
“r” | 1. 以只读 的模式打开一个文本文件,从文件头 开始读取 2. 该文本文件 必须存在 |
“w” | 1. 以只写 的模式打开一个文本文件,从文件头 开始写入 2. 如果 文件不存在则创建 一个新的文件3. 如果文件已存在则将文件的长度截断为 0(重新写入的内容将 覆盖 原有的 所有内容 ) |
“a” | 1. 以追加 的模式打开一个文本文件,从文件末尾 追加内容 2. 如果 文件不存在则创建 一个新的文件 |
“r+” | 1. 以读和写的模式 打开一个文本文件,从文件头 开始读取和写入 2. 该文件 必须存在 3. 该模式不会将文件的长度截断为 0(只 覆盖重新写入的内容 ,原有的内容保留 ) |
“w+” | 1. 以读和写的模式 打开一个文本文件,从文件头 开始读取和写入 2. 如果文件 不存在则创建 一个新的文件3. 如果文件已存在则将文件的长度截断为 0( 重新写入的内容 将覆盖原有的所有内容 ) |
“a+” | 1. 以读和追加的模式 打开一个文本文件2. 如果文件 不存在则创建 一个新的文件3. 读取是 从文件头 开始 ,而写入 则是在 文件末尾 追加 |
“b” | 1. 与上面 6 中模式均可结合(”rb”, “wb”, “ab”, “r+b”, “w+b”, “a+b”) |
关闭文件
使用到的函数
fclose()
#include <stdio.h> int fclose(FILE *fp);
参数
参数 | 含义 |
---|---|
fp |
指向一个待关闭的文件指针 |
返回值:
- 关闭成功,返回值是 0;
- 关闭失败,返回值是
EOF
,并设置errno
为指定的错误。
备注:
磁盘已满
、设备出错
或者 I/O 错误
均可能导致 fclose 函数调用失败。
实例 (打开文件 & 关闭文件)
#include <stdio.h> #include <stdlib.h> int main(void){ FILE *fp; // 定义文件指针 // 打开文件 fp = fopen("data.txt","r"); if (fp == NULL){ printf("打开文件失败!!!\n"); exit(EXIT_FAILURE); }; // 关闭文件 if (fclose(fp) != EOF){ printf("关闭文件成功~~~"); exit(EXIT_SUCCESS); }; return 0; }
文件读写
字符读写
字符读 ‘fgetc()’、’getc()’
fgetc()
说明
#include <stdio.h> ... int fgetc(FILE *stream);
参数说明:
- stream 该参数是一个 FILE 对象的指针,指定一个待读取的文件流
返回值:
- 成功:
- 将读取到的
unsigned char 类型
转换为int 类型
并返回
;
- 将读取到的
- 失败:
- 如果文件结束或者遇到错误则返回
EOF
。
- 如果文件结束或者遇到错误则返回
getc()
说明
fgetc()
、getc()
两个的功能 和 描述基本上是 一模一样 的
,它们的区别主要在于实现上:fgetc() 是一个函数
;而 getc() 则是一个宏的实现
实例
#include <stdio.h> #include <stdlib.h> int main(){ // 定义文件指针 FILE *fp; // 打开文件 if ((fp = fopen("./data.txt","r")) == NULL){ // 文件打开失败 exit(EXIT_FAILURE); } // 读取文件的内容 char ch; while ((ch = fgetc(fp)) != EOF){ putchar(ch);; } // 关闭文件流 fclose(fp); return 0; }
字符写 ‘fputc()’、’putc()’
将一个字符 写入
到指定的文件中
并推进文件的位置指示器(用来指示接下来要读写的下一个字符的位置)。
fputc()
说明
#include <stdio.h> ... int fputc(int c, FILE *stream);
参数说明:
c
: 指定待写入 的字符
stream
: 该参数是一个FILE 对象的 指针
,指定一个待写入的文件流
返回值:
- 成功:
- 返回
写入的字符
;
- 返回
- 失败:
- 如果文件结束或者遇到错误则返回
EOF
。
- 如果文件结束或者遇到错误则返回
putc()
说明
fputc()
、putc()
两个的功能 和 描述基本上是 一模一样 的
,它们的区别主要在于实现上:fputc() 是一个函数
;而 putc() 则是一个宏的实现
实例
#include <stdio.h> #include <stdlib.h> int main(){ // 定义文件指针 FILE *fp; // 打开文件 if ((fp = fopen("./data.txt","w")) == NULL){ // 文件打开失败 exit(EXIT_FAILURE); } // 写入一个字符 char ch = 'A'; if (fputc(ch,fp) == EOF){ // 写入失败 exit(EXIT_FAILURE); }; // 关闭文件流 fclose(fp); return 0; }
字符串读写
字符读 ‘fgets()’
用于从指定文件
中读取 字符串
。
最多可以读取
size - 1
个字符,因为结尾处会自动添加
一个字符串结束符 '\0'
。当 读取 到换行符('\n')
或文件结束符(EOF)
时,表示结束读取('\n'
会被作为一个合法的 字符
读取)。
fgets()
说明
#include <stdio.h> ... char *fgets(char *s, int size, FILE *stream);
参数说明:
- s: 字符型指针,指向用于
存放读取 字符串的 位置
- size: 指定
读取的 字符数
(包括最后自动添加的 ‘\0’) - stream: 该参数是一个
FILE 对象的 指针
,指定一个待操作的数据流
返回值:
- 成功:
- 返回
s
参数指向的地址
- 返回
- 失败:
- 如果在
读取 字符的 过程
中遇到EOF
,则 eof 指示器被设置;如果还没读入 任何字符
就遇到
这种EOF
,则s
参数指向的位置保持原来的内容
,函数返回 NULL
。 - 如果在读取的过程中
发生错误
,则 error 指示器被设置,函数返回 NULL
,但s
参数指向的内容 可能 被改变
。
- 如果在
实例
#include <stdio.h> #include <stdlib.h> #define MAX 1024 int main(){ // 打开文件 FILE *fp; if ((fp = fopen("./data.txt","r")) == NULL){ exit(1); } // 读取文件 char s[MAX]; if (fgets(s,MAX,fp) == NULL){ // 读取失败 exit(2); }; printf("%s",s); // 输出读取内容 // 关闭文件 fclose(fp); return 0; }
字符写 ‘fputs()’
fputs 函数用于将一个字符串写入到指定的文件中,表示字符串结尾的 ‘\0’ 不会被一并写入
fputs()
说明
#include <stdio.h> ... int fputs(const char *s, FILE *stream);
参数说明:
- s: 字符型指针,指向用于
存放 待写入 字符串的位置
- stream: 是一个
FILE 对象的 指针
,指定
一个待操作的数据流
返回值:
- 成功:
- 返回一个
非 0 值
- 返回一个
- 失败:
- 返回
EOF
- 返回
实例
#include <stdio.h> #include <stdlib.h> int main(void){ // 打开文件 FILE *fp; if ((fp = fopen("./data.txt","w")) == NULL){ exit(1); // 打开文件失败 }; // 写入内容 char s[] = "i love you ***"; if (fputs(s,fp) != 0){ exit(2); // 写入失败 } // 关闭失败 fclose(fp); return 0; }
版权声明:《 【C语言】文件操作(上部) 》为明妃原创文章,转载请注明出处!
最后编辑:2021-1-21 01:01:29