一、打开文件
再进行文件操作之前必须先打开文件,使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为:
// filename为文件路径;mode是打开方式;返回值是FILE类型结构体指针。
FILE *fopen(char *filename, char *mode);
通过判断 fopen() 的返回值是否和 NULL 相等来判断是否打开失败;
mode的值可以是下面其中的一个(下面是文本文件的打开方式,如果是打开二进制文件需要在后面加一个b,比如:rb, wb, ab, rb+, r+b, wb+, w+b, ab+, a+b
)。
打开方式 | 描述 |
---|---|
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
二、读写文件
读写函数 fprintf 与 fscanf可以从磁盘中读写任意类型的文件,但对二进制文件的读写来说,考虑到文件的读写效率等原因,还是建议尽量使用 fread 和 fwrite 函数进行读写操作。这里主要介绍fread ()
和fwrite ()
两个函数。
文件写入
size_t fwrite(const void * buf, size_t size, size_t count, FILE *fp);
参数说明:
buf 是要写入的内容
size 是指单个元素的大小(单位是字节,比如写入一个 int 型数据就是 4 字节)。
count 指出要写的元素个数。
fp 是要写入的文件
返回值:返回写入的记录数,成功时返回的记录数等于 count 参数,出错返回 0。
文件读取
size_t fread(void *buf, size_t size, size_t count, FILE *fp);
参数说明:
buf 读取内容存放的缓存区指针
size 是指单个元素的大小(单位是字节,比如读取一个 int 型数据就是 4 字节)。
count 指出要读的元素个数。
fp 是要读取的文件
返回值:返回读取的记录数,成功时返回的记录数等于 count 参数,出错或读到文件末尾时返回的记录数小于 count,也可能返回 0。
三、关闭文件
文件操作完毕后一定要关闭文件释放内存,否则会导致内存泄露。
int fclose( FILE *fp );
fp是要关闭的文件,返回值是0时表示关闭成功,否则关闭出错。
四、示例
#include <stdio.h>
int main()
{
// 打开文件,如果文件不存在就会创建一个新文件
FILE *f = fopen("./abc.txt","a+");
// 写入文件
int flag;
flag = fwrite("abcdefg",1,8,f);
if(flag == 8){
printf("文件写入成功\n");
}
// 读取文件
char buf[1024] = {0};
// 因为文件打开方式是a+,也即是从后面追加,操作完后游标是在文件末尾,所以需要先将其移动到文件最前面,否则无法读取到内容
rewind(f);
fread(buf,1,8,f);
printf("%s\n",buf);
// 关闭文件
flag = fclose(f);
if(!flag){
printf("关闭文件成功\n");
}
return 0;
}
网友评论