C++初阶之文件操作

本文介绍了C++中如何进行文件操作,包括文本文件和二进制文件的写入和读取。文本文件以ASCII码存储,二进制文件则以二进制形式存储。使用ofstream进行写操作,ifstream进行读操作,fstream可同时进行读写。文件打开方式有多种,如ios::in、ios::out、ios::ate等。文章提供了详细的代码示例,展示如何写入和读取文件内容。
摘要由CSDN通过智能技术生成


首先我们先来思考一个问题:程序运行时产生的数据都属于临时数据,程序一旦运行结束这些数据都会被释放掉。那么 如何才能将数据永久化?答案是:我们可以通过文件将数据永久保存起来!
我们通常可以把文件分为 文本文件二进制文件两类。 文本文件:文件以文本的ASCII码存储在计算机中; 二进制文件:文件以文本的二进制形式存储在计算机中。(用户一般不能直接读懂它们)
操作文件的三大类:1、ofstream 写操作;2、ifstream 读操作;3、fstream 读写操作

1、文本文件

1.1 写文件

写文件的操作步骤主要有五步
1、包含头文件 #include<fstream>
2、创建流对象 ofstream ofs;
3、打开文件 ofs.open("文件路径",打开方式);
如果没有指定路径,默认与.CPP文件同路径下。文件的打开方式

打开方式解释
ios::in为读文件而打开文件
ios::out为写文件而打开文件
ios::ate初始位置:文件尾
ios::app追加方式写文件
ios::trunc如果文件存在先删除,再创建
ios::binary二进制方式

注意:文件打开方式可以配合使用,可以利用操作符 |。例如: 用二进制方式写文件:ios::out | ios::binary
4、写入数据ofs<<"写入的数据";
5、关闭文件ofs.close();
下面我们通过一段代码直观感受一下:

#include<iostream>
#include<string>
using namespace std;
#include<fstream>

int main()
{
	ofstream ofs;
	ofs.open("Write.txt",ios::out);//如果没有指定路径,默认与.CPP文件同路径下。
	ofs<<"写入的内容"<<endl;
	ofs.close();
	system ("pause");
	return 0;
}

运行结果就是在.cpp文件同目录下创建了一个文件,文件内容为输入的内容。
在这里插入图片描述

1.2 读文件

读文件与写文件的步骤相似:
1、包含头文件 #include<fstream>
2、创建流对象 ifstream ifs;
3、打开文件并判断文件是否打开 ifs.open("文件路径",打开方式);
4、读数据 四种方式读取

//第一种
//char buf[1024]={0};
while(ifs>>buf){
	cout<<buf<<endl;
}

//第二种
char buf[1024]={0};
while(ifs.getline (buf ,sizeof(buf ))){
	cout<<buf<<endl;
}

//第三种
string buf;
while(getline (ifs,buf)){
		cout<<buf<<endl;
	}

//第四种
char c;
while((c=ifs.get())!=EOF){    //EOF end of file 文件尾部
		cout<<c<<endl;
	}

5、关闭文件ofs.close();

#include<iostream>
#include<string>
using namespace std;
//第一步 包含头文件
#include<fstream>
int main()
{
	//第二步 创建对象流
	ifstream ifs;
	//第三步 打开文件并
	ifs .open("Write.txt",ios ::in);
	//判断是否打开
	if(!ifs.is_open()){
	    cout<<"文件打开失败"<<endl;
	   return 0;
	}   
	//第四步 读数据(四种方式读取)
	//第四种
	char c;
	while((c=ifs.get())!=EOF)    //EOF end of file 文件尾部
		{
			cout<<c<<endl;
		}
	//第五步 关闭文件
	ifs.close() ;
	system ("pause");
	return 0;
}

2、 二进制文件

2.1写文件

二进制方式写文件主要利用流对象调用成员函数write
函数原型: ostream& write(const char*buffer,len);
参数解释:字符指针buffer指向内存中一段储存空间,len是读写的字节数。

#include<iostream>
#include<string>
//第一步 包含头文件
#include<fstream >
using namespace std;
class Person {
public:	
	char  m_name[64];
	int m_age;

};
void test01()
{
	//第二步 创建对象流
	ofstream ofs;
	//第三步 打开文件
	ofs .open("Write.txt",ios ::out |ios::binary );
	//第四步 写文件
	Person p={"张三",18} ;
	ofs.write ((const char *)&p,sizeof (Person ));
	//第五步 关闭文件
	ofs.close() ;
}
void    main()
{
	test01();
	system ("pause");
	return   ;
}

2.2读文件

二进制方式写文件主要利用流对象调用成员函数read
函数原型: istream& read(char*buffer,int len);
参数解释:字符指针buffer指向内存中一段储存空间,len是读写的字节数。

#include<iostream>
#include<string>
//第一步 包含头文件
#include<fstream >
using namespace std;
class Person {
public:	
	char  m_name[64];
	int m_age;
};
void test01()
{
	//第二步 创建对象流
	ifstream ifs;
	//第三步 打开文件
	ifs .open("TEXT.txt",ios ::in |ios::binary );
	if(!ifs.is_open())
	{
	    cout<<"文件打开失败"<<endl;
	    return;
	}   
	//第四步 读文件
	Person p;
	ifs.read  ((char *) &p,sizeof (Person ));
	cout<<"姓名:"<<p.m_name  <<"	年龄:"<<p.m_age  <<endl;
	//第五步 关闭文件
	ifs.close() ;
}
void    main()
{
	test01();
	system ("pause");
	return   ;
}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值