c及cpp的文件读写
c风格文件读写
头文件
c风格读写文件标准库包含于头文件<stdio.h>或<cstdio>(cpp)。
打开文件
使用fopen()新建或打开文件,fopen()会返回FILE对象:
其中,参数mode的可选值如下:
| mode | 描述 |
|---|---|
| r | 打开已有的文本文件,允许读写 |
| w | 打开文本文件,允许写入,如果文件不存在则新建,如果文件存在则覆盖 |
| a | 打开文本文本,追加写入,如果文件不存在则新建 |
| r+ | 打开文本文件,允许读写 |
| w+ | 打开文本文本,允许读写,如果文件不存在则新建,如果文件存在则覆盖 |
| a+ | 打开文本文本,追加写入,如果文件不存在则新建,从头读取,追加写入 |
对应的二进制模式mode为:rb/wb/ab/rb+/wb+/ab+/r+b/w+b/a+b。
读取文件
二进制读取
buffer:存放文件读取数据的起始地址。size_of_elements:每个数据块的字节数。number_of_elements:数据块的个数。fp:文件指针。
从fp指向的文件中读取数据块,读取的总字节数为size_of_elements*number_of_elements,读取出来的数据存放到buffer为起始地址的内存中,如果文件结束或发生错误,返回值为0。
字符串读取
buffer:字符数组指针,该数组存储读取的字符串。n:要读取的最大字符数,包括最后的空字符,通常是buffer数组长度。fp:文件指针。
如果成功,该函数返回buffer指针;如果错误,返回空指针。
fp:文件指针。format:c字符串,比如%c/%s/%d/%u/%o/%x(字符/字符串/十进制数/无符号十进制数/八进制数/十六进制数)。
该函数类似于scanf(),需要提供读取数据的类型和格式:
字符读取
fgetc()函数从fp指向的文件中读取一个字符,返回值为读取的字符,如果发生错误则返回EOF。
写入文件
buffer:待写入数据的起始地址。size_of_elements:每个数据块的字节数。number_of_elements:数据块的个数。fp:文件指针。
如果执行成功,返回写入的数据块个数。
类似于读取文件,写入文件同样有对应的字符串读取和字符读取版本:
关闭文件
移动文件位置指针
-
rewind()用来将文件指针移动到文件开头,原型为: -
fseek()用来将文件指针移动到任意位置,原型为:fp:待移动的文件指针。offset:偏移量,要移动的字节数。origin:起始位置,文件开头、当前位置和文件末尾:
| 常量名 | 含义 | 常量值 |
|---|---|---|
| SEEK_SET | 文件开头 | 0 |
| SEEK_CUR | 当前位置 | 1 |
| SEEK_END | 文件末尾 | 2 |
cpp文件流和读写文件
头文件
cpp风格读写文件标准库包含于头文件<fstream>。cpp标准库中有三个类可以用于文件操作,统称为文件流类,这三个类分别是:
ifstream:用于从文件中读取数据。ofstream:用于向文件中写入数据。fstream:既可用于从文件中读取数据,又可用于向文件中写入数据。

cpp读写文件示例
fstream常用成员方法

打开模式

移动文件读写指针
ifstream类和fstream类有seekg()成员函数,可以设置文件读指针的位置。ofstream类和fstream类有seekp成员函数,可以设置文件写指针的位置。
函数原型如下:
其中,mode指定移动指针的起始位置,可选项为文件开头ios::beg、文件当前位置ios::cur和文件末尾ios::end,当mode设置为文件末尾时,参数offset只能是0或者负数。
相对应地,可以通过tellg()和tellp()成员函数获取文件读指针和写指针的位置。
C/C++ 操作文件 C++文件操作 C++ 文件和流 File Handling through C++ Classes Input/output with files
最后更新:
2022-06-08