C++文件的读写

需要相关的类

fstream提供三种类,实现C++对文件的操作

ofstream:写操作,由ostream引申而来

ifstream:读操作,由istream引申而来 

fstream :同时读写操作,由iostream引申而来 

实现一个简单的读写:

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

void main()
{
	char* fName = (char*)"H:/1.txt";

	//写文件
	ofstream fout(fName);//建立一个输出流对象,和文件关联
	fout << "test1" << endl;
	fout << "test2" << endl;
	fout << "test3" << endl;
	fout.close();

	//读文件
	ifstream fin(fName);
	char getChar;
	while (fin.get(getChar))
	{
		cout << getChar;
	}
	fin.close();

	system("pause");
}

输出结果:

  

C++支持多种文件打开方式,ofstream构造函数或open()函数接收的第一个参数为文件路径,第二个参数为文件打开的方式,第三个参数为打开文件的属性:

打开文件方式:

ios::in以输入的方式打开文件
ios::out以输出方式打开文件(默认方式),如果已有此文件名字的文件,则将其原有内容全部清除
ios::app以输出的方式打开文件,写入的数据添加在文件的末尾
ios::ate打开一个已有文件,文件指针指向文件末尾
ios::trunc打开一个文件,如果文件已存在,则删除其中全部数据,如果文件不存在,则建立新文件,如果已指定了ios::out方式,而未指定ios::app、ios::ate、ios::in,则同时默认此方式
ios::binary以二进制方式打开一个文件,如不指定此方式则默认为ASCII方式
ios::nocreate打开一个已有的文件,如文件不存在,则打开失败,
ios::noreplace如果文件不存在则建立新文件,如果文件已存在则操作失败,

 

 

 

 

 

 

 

 

 

ios::in | ios::out以输入和输出的方式打开文件,文件可读可写
ios::out | ios::binary以二进制方式打开一个输出文件
ios::in | ios::binary以二进制方式打开一个输入文件

 

 

 

 

注:新版本的I/O类库中不提供ios::nocreate和ios::noreplace;

打开文件属性:

0普通文件,打开访问
1只读文件
2隐含文件
4系统文件

 

 

 

 

 

void main()
{
	char* fName = (char*)"H:/2.txt";//此文件不存在

	//写文件
	ofstream fout(fName,ios::_Nocreate);//建立一个输出流对象,和文件关联
	if (!fout)
	{
		cout << "读取文件失败!" << endl;
		system("pause");
		return;
	}

	system("pause");
}

输出结果:

读写二进制文件:

class Teacher
{
public:
	Teacher()
	{
		m_age = 25;
		strcpy(m_name, "不告诉你");
	}
	Teacher(int age,char* name)
	{
		m_age = age;
		strcpy(m_name, name);
	}
	void printT()
	{
		cout << "age:" << m_age << "  name:" << m_name << endl;
	}

private:
	int m_age;
	char m_name[80];

};



void main()
{
	char* fName = (char*)"H:/1.dat";

	//写文件
	ofstream fout(fName, ios::binary);//建立一个输出流对象,和文件关联
	if (!fout)
	{
		cout << "读取文件失败!" << endl;
		system("pause");
		return;
	}
	Teacher t1(30,(char*)"张三");
	Teacher t2(31, (char*)"李四");
	fout.write((char*)&t1, sizeof(Teacher));
	fout.write((char*)&t2, sizeof(Teacher));
	fout.close();

	Teacher tem;
	ifstream fin(fName, ios::binary);
	fin.read((char*)&tem, sizeof(tem));
	tem.printT();
	fin.read((char*)&tem, sizeof(tem));
	tem.printT();
	fin.close();

	system("pause");
}

输出结果:

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值