C++流和文件操作

C++流和文件操作

C++中流的概念

C++中输入输出操作使用流来完成,将输出输入的操作称为流类,实现流类的库为流类库

流类库头文件

 #include <iostream>

C++常用流类派生关系:

在这里插入图片描述

  • ios

    抽象的基类

  • istream

    输入的流类。cin为该流类的对象

  • ostream

    输出的流类。cout为该流类的对象

  • ifstream

    读取文件数据流类

  • ofstream

    向文件写入数据流类

  • fstream

    向文件读写数据的流类

iostream头文件中定义的四个标准流对象

  • cin——标准输入流,从输入设备中读取数据,可重定向为文件写入数据
  • cout——标准输出流,在显示设备显示数据,可重定向为向文件读出数据
  • cerr——标准错误输出流,向显示设备输出出错信息
  • clog——标准错误输出流,向显示设备输出出错信息

文件操作

头文件

#include <fstream>

文件打开方式

打开方式 说明
ios::in 读文件方式打开文件,文件不存在打开失败
ios::out 写文件方式打开文件,文件不存在久创建了再打开
ios::ate 打开文件后,指针指向文件尾
ios::app 以追加方式打开写文件
ios::trunc 文件存在先删除再创建
ios::binary 二进制方式

写文件

void write_file(void)
{
	fstream ifs;                          //1、创建流对象
	ifs.open("person.txt", ios::out);     //2、打开文件
	ifs << "name : guangjieMVP" << endl;  //3、向文件中写入数据,使用<<运算符写入
	ifs << "id : 5201314" << endl;        //4、向文件中写入数据,使用<<运算符写入
	ifs.close();                          //5、关闭文件
}

int main(void)
{
	write_file();
	return 0;
}
函数名 参数1 参数2
open 文件路径,如D:\test\person.txt,不写路径默认当前目录 文件打开方式

读文件

四种方式:

//方式1,使用运算法>>读出数据到buf
void read_file1(void)
{
	fstream ifs;                      //1、创建流对象

	ifs.open("person.txt", ios::in);    //2、打开文件
	if(!ifs.is_open())                //3、判断文件是否打开成功
	{
		cout << "文件打开失败!" << endl;  
		return;
	}
	char buf[1024];
	while(ifs >> buf)              //4、使用运算符>>读出数据到buf
	{
		cout << buf << endl;
	}
	ifs.close();     
}

void read_file2(void)
{
	fstream ifs;                      //1、创建流对象

	ifs.open("person.txt", ios::in);    //2、打开文件
	if(!ifs.is_open())                //3、判断文件是否打开成功
	{
		cout << "文件打开失败!" << endl;  
		return;
	}
	char buf[1024];
	while(ifs.getline(buf, sizeof(buf)))    //4、使用流对象中的读出函数从文件中读出数据放到buf中
	{
		cout << buf << endl;
	}
	ifs.close();                    //5、关闭文件
}

void read_file3(void)
{
	fstream ifs;                        //1、创建流对象

	ifs.open("person.txt", ios::in);    //2、打开文件
	if(!ifs.is_open())                   //3、判断文件是否打开成功
	{
		cout << "文件打开失败!" << endl;  
		return;
	}
	string buf;
	while(getline(ifs, buf))              //4、从文件中读出数据放到buf中
	{
		cout << buf << endl;
	}
	ifs.close();                           //5、关闭文件
}

void read_file4(void)
{
	fstream ifs;                           //1、创建流对象

	ifs.open("person.txt", ios::in);       //2、打开文件
	if(!ifs.is_open())                      //3、判断文件是否打开成功
	{
		cout << "文件打开失败!" << endl;  
		return;
	}
	char c;
	while((c = ifs.get()) != EOF)              //4、使用流对象ifs.get()函数从文件one by one byte方式放到c中
	{
		cout << c;
	}
	ifs.close();                               //5、关闭文件
}

int main(void)
{
	write_file();
//	read_file1();
//	read_file2();
//	read_file3();
	read_file4();
	
	return 0;
}

二进制方式读写文件

#include <fstream>
#include <string>
#include <iostream>

using namespace std;

class Person
{
public:
	int age;
	string name;
public:
	Person(string name = "zhangsan", int age = 20)
	{
		this->age = age;
		this->name = name;
	}
};

//二进制方式读写文件
void binary_write_read(void)
{
	Person person("guangjieMVP"); 
	Person person1;

	//写文件     
    fstream ofs("test.txt", ios::out | ios::binary);   //1、创建输出流对象

	ofs.write((char *)&person, sizeof(person));       //2、写入数据
	ofs.close();                                      //3、关闭文件
	
	//读文件
	fstream ifs("test.txt", ios::in | ios::binary);   //1、创建输入流对象
	if(!ifs.is_open())            
	{
		cout << "打开文件失败!" << endl;
	}
    ifs.read((char *)&person1, sizeof(person1));      //2、读出文件数据
	cout << "Person name : " << person1.name << endl;
	cout << "Person age : " << person1.age << endl;     
	ifs.close();                                      //3、关闭文件
}

int main(void)
{
	binary_write_read();

	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_36413982/article/details/105710840