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

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

  • 输入输出流概念
  • 文件流的概念
  • 文件操作
    • 写文件
    • 读文件
  • 综合案例

参考博文:
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 二进制方式,默认为文本文件

写文件

写文件步骤如下:

  1. 包含头文件

    #include 
    
  2. 创建流对象

    ofstream ofs;
    
  3. 打开文件

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

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

    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

读文件步骤如下:

  1. 包含头文件

    #include 
    
  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 
#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;
}

你可能感兴趣的:(C++,c++,开发语言)