C++核心编程——文件编程

本文详细介绍了C++中的文件编程,包括输入输出流的概念,如何使用ofstream、ifstream和fstream进行文件操作,以及写入和读取文件的步骤。并通过一个综合案例展示了文件复制与粘贴功能的应用。
摘要由CSDN通过智能技术生成

参考博文:
C++文件操作(2023最新详解)

输入输出流概念

在C++中,输入输出是同流来完成的。C++的输出操作将一个对象的状态转换成一个字符序列,输出到某个地方。

输入操作也是从某个地方接收到一个字符序列,然后将其转换成一个对象的状态所要求的格式。

文件流的概念

在C++里,文件操作是通过流来完成的。C++总共有输入文件流、输出文件流和输入输出文件流3种,并已将它们标准化。

  • 要打开一个输入文件流,需要定义一个 ifstream类型的对象。
  • 要打开一个输出文件流,需要定义一个 ofstream类型的对象。
  • 如果要打开输入输出文件流,则要定义一个 fstream类型的对象。

这3种类型都定义在头文件 fstream 里。

一个输出流对象是信息流动的目标,ofstream是最重要的输出流。
一个输入流对象是数据流动的源头,ifstream是最重要的输入流。
一个iostream对象可以是数据流动的源或目标,fstream就是从它派生的。

这3种类型都定义在头文件 fstream 里。

文件操作

可以总结出对文件进行操作的方法如下:

  • 包含头文件: #include <fstream>
  • 创建一个对象流
  • 将这个流和相应的文件关联起来,并设置打开方式

文件打开方式:

打开方式解释
ios::in只读打开
ios::out只写打开,默认方式
ios::trunc如果文件存在先删除,再创建
ios::ate打开一个已有的输入或输出文件并查找到文件尾开始
ios::app在文件尾追加方式写文件
ios::binary二进制方式,默认为文本文件

写文件

写文件步骤如下:

  1. 包含头文件

    #include <fstream>
    
  2. 创建流对象

    ofstream ofs;
    
  3. 打开文件

    ofs.open("文件路径",打开方式);
    
  4. 写数据

     ofs << "写入的数据";
    
  5. 关闭文件

    ofs.close();
    

示例:

#include <iostream>
#include <fstream>

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

读文件步骤如下:

  1. 包含头文件

    #include <fstream>
    
  2. 创建流对象

    ifstream ifs;
    
  3. 打开文件并判断文件是否打开成功

    ifs.open("文件路径",打开方式);
    
  4. 读数据
    (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;
    } 
    
  5. 关闭文件

    ifs.close();
    

示例:

#include <iostream>
#include <fstream>

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 <iostream>
#include <fstream>
#include <vector>

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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不会编程的小江江

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值