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