参考博文:
C++文件操作(2023最新详解)
在C++中,输入输出是同流来完成的。C++的输出操作将一个对象的状态转换成一个字符序列,输出到某个地方。
输入操作也是从某个地方接收到一个字符序列,然后将其转换成一个对象的状态所要求的格式。
在C++里,文件操作是通过流来完成的。C++总共有输入文件流、输出文件流和输入输出文件流3种,并已将它们标准化。
ifstream
类型的对象。ofstream
类型的对象。fstream
类型的对象。这3种类型都定义在头文件 fstream 里。
一个输出流对象是信息流动的目标,ofstream是最重要的输出流。
一个输入流对象是数据流动的源头,ifstream是最重要的输入流。
一个iostream对象可以是数据流动的源或目标,fstream就是从它派生的。
这3种类型都定义在头文件 fstream 里。
可以总结出对文件进行操作的方法如下:
#include
文件打开方式:
打开方式 | 解释 |
---|---|
ios::in | 只读打开 |
ios::out | 只写打开,默认方式 |
ios::trunc | 如果文件存在先删除,再创建 |
ios::ate | 打开一个已有的输入或输出文件并查找到文件尾开始 |
ios::app | 在文件尾追加方式写文件 |
ios::binary | 二进制方式,默认为文本文件 |
写文件步骤如下:
包含头文件
#include
创建流对象
ofstream ofs;
打开文件
ofs.open("文件路径",打开方式);
写数据
ofs << "写入的数据";
关闭文件
ofs.close();
示例:
#include
#include
using namespace std;
int main()
{
ofstream ofs;
ofs.open("test.txt", ios::out);
ofs << "姓名:张三" << endl;
ofs << "性别:男" << endl;
ofs << "年龄:18" << endl;
ofs.close();
return 0;
}
部分功能函数:
函数 | 功能 |
---|---|
eof() | 如果提取操作已经到达文件尾,则返回true,否则返回false |
is_open() | 判定文件是否打开,若是,返回true,否则返回false |
读文件步骤如下:
包含头文件
#include
创建流对象
ifstream ifs;
打开文件并判断文件是否打开成功
ifs.open("文件路径",打开方式);
读数据
(1)按字符逐个读取
char str[1024] = { 0 };
while(ifs >> str)
{
cout << str << endl;
}
(2)按行读取
char str[1024] = {0};
while(ifs.getline(str, sizeof(str)))
{
cout << str << endl;
}
关闭文件
ifs.close();
示例:
#include
#include
using namespace std;
int main()
{
ifstream ifs;
ifs.open("test.txt", ios::in);
if(!ifs.is_open())
cout << "文件打开失败" << endl;
char str[1024] = {0};
while(ifs >> str)
{
cout << str << endl;
}
ifs.close();
return 0;
}
案例一:
创建文件输入输出流,通过对文件的写入与读取,完成对一个文件的复制与粘贴功能。
#include
#include
#include
using namespace std;
int main()
{
ifstream ifs;
ofstream ofs;
vector<string> v;
ifs.open("test.txt", ios::in);
ofs.open("dst.txt", ios::out | ios::trunc);
if(!ifs.is_open())
cout << "src文件打开失败" << endl;
if(!ofs.is_open())
cout << "dst文件打开失败" << endl;
//依次读取每个字符并存入容器
char str[1024] = {0};
while(ifs >> str)
{
v.push_back(str);
}
//将容器数据依次存入目标文件
for(vector<string>::iterator it = v.begin(); it < v.end(); it++)
{
ofs << *it;
}
ifs.close();
ofs.close();
return 0;
}