C++基础-文件操作

文件操作(输入输出流)

文件操作的概述

程序运行时产生的数据都属于零食数据,程序一旦运行结束,就会被释放

创新互联建站主要从事网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务丰县,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

通过文件可以将数据持久化

C++中对文件的操作包含头文件(文件流)

文件类型分为两种

  • 文本文件:文件以文本的ASCII码的形式存储在计算机中
  • 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不直接读他们

操作文件的三大类

  • ofstream:读文件
  • ifstream:写文件
  • festream:读写文件

文本文件

写文件

步骤

  1. 包含头文件

    #include
    
  2. 创建流对象

    ofstream ofs;
    
  3. 打开文件

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

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

    ofs.cloSe()
    

打开方式

  • 文件的打开方式可以配合使用,用|操作符(eg:los::binary | ios::in)

路径

  • 没有指明路径的化,默认和当前项目的路径一致
  • 可以用绝对,也可以用相对

例子

#include
#include //添加头文件
using namespace std;

void test01(){
	ofstream ofs;  //创建流对象
	ofs.open("test.txt",ios::out);  //打开的地址和方式
	ofs << "你好" << endl;  //文件的内容
	ofs.close();  //关闭文件
}

int main(int argc, char** argv) {
	test01();
	return 0;
} 

读文件

步骤相对于写文件多一点

步骤

  1. 包含头文件

    #include
    
  2. 创建流对象

    ifstream ifs;
    
  3. 打开文件并判断释放打开成功

    ifs.open("文件路径",打开方式);
    if(!ifs.is_open()){
    		cout << "文件打开失败" << endl;
    		return;
    	}else{...}
    
  4. 读数据

    一共四种...

  5. 关闭文件

    ifs.cloSe()
    

例子

#include
#include
#include
using namespace std;

void test01(){
	ifstream ifs;
	ifs.open("test.txt",ios::in);
	if(!ifs.is_open()){  //判断是否打开成功
		cout << "文件打开失败" << endl;
		return;
	}else{
		//第一种
//	char buf[1024] = {0};
//		while(ifs >> buf){   //将ifs的数据放入buf中,当数据读完时,返回false,结束循环(不读取数据)
//			cout << buf <

小小练习-复制文件

在上面代码的基础上将已经创建好的test.txt文件复制到test1.txt文件下

#include  //添加头文件
#include
#include

using namespace std; 

void test01(){
	ofstream ofs;    //创建对象
	ifstream ifs;
    
	ifs.open("test.txt",ios::in);       //路径和方式
	ofs.open("test1.txt",ios::out);
    
	if(!ifs.is_open()){        //复制过程
		cout << "文件打开失败" << endl;   //判断是否打开成功
        return;
	}else{
		string buf;
        
		while(getline(ifs,buf)){   //读文件
			ofs << buf << "(test.txt复制成功)" << endl;	 	 //写(复制)文件
            // 添加标识,判断复制是否成功
		}
	}
    
	ofs.close();    //关闭文件
	ifs.close();
}

int main(int argc, char** argv) {
	test01();
	return 0;
} 


二进制文件

在以二进制读、写文件的时候要加多加一个‘ios::binary’

写文件

二进制方式读文件主要利用流对象调用函数write(读出的部分数据看不懂没有关系,只要还能读回来就可以啦)

函数类型:ofs.write((const char *) &buffer,int len);

参数解释:buffer指向内存中的一段数据;len是要读取的字节数

例子

#include
#include

using namespace std; 

class Person{  //写个类读读
public:
	char m_Name[64]; //最好用char
	int m_Age;
};

void test01(){
	ofstream ofs("Person.txt",ios::binary | ios::out);  //可以一步写哦
	//ofs.open("Person.txt",ios::binary | ios::out);
    
	Person p = {"Tom" ,18};  //造个对象
     
	ofs.write((const char*)&p,sizeof(p));    //用write函数读出来
	ofs.close();
}

int main(int argc, char** argv) {
	test01();
	return 0;
} 

读文件

二进制方式读文件主要利用流对象调用函数read

函数类型:ofs.read((const char *) &buffer,int len);

参数解释:buffer指向内存中的一段数据;len是要读取的字节数

例子

#include  //是同一个Person,年龄是20咯(类哦)
#include //我把读的也写进来了,这样更灵活一点

using namespace std; 

class Person{
public:
	char m_Name[64];
	int m_Age;
};

void test01(){
    //写文件
	ofstream ofs("Person.txt",ios::binary | ios::out);  //可以一步写哦
	//ofs.open("Person.txt",ios::binary | ios::out);
	
	Person p = {"Tom" 20};  //改个对象的参数()
	
	ofs.write((const char*)&p,sizeof(p));    
	ofs.close();
    
	//读文件
	ifstream ifs("Person.txt",ios::binary | ios::in);
    
	if(!(ifs.is_open())){
		cout << "文件打开失败" << endl;
		return;
	}else{
		Person p;
		ifs.read((char*)&p,sizeof(p));
		cout << p.m_Name << p.m_Age <

为进一步验证是对同一个文件操作,可以做如下检验

else{
    	Person p = {"Petter",250};//再次修改
		ifs.read((char*) &p,sizeof(p)); 
		cout << p.m_Name << p.m_Age <

当前文章:C++基础-文件操作
本文路径:http://pwwzsj.com/article/dsoipje.html