需要相关的类
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");
}
输出结果: