C++中对文本文件操作需要包含头文件
(1)文件类型分为两种:
1)文本文件:文件以文本的ASCII码形式存储在计算机中
2)二进制文件:文件以文本的二进制i形式存储在计算机中,用户一般不能直接读懂文件内容
(2)文件操作的三大类:
1)ofstream:写操作
2)ifstream:读操作
3)fstream:读写操作
以写文件为例:
写文件步骤如下:
1.包含头文件:
#include
2.创建流对象
ofstream ofs
3.打开文件
ofs.open(“文件路径”,打开方式);
ofs.is_open();判断是否打开成功
4.写数据
ofs<<“写入的数据”;
5.关闭文件
ofs.close();
文件打开方式:
例子
#include<iostream>
#include<fstream>
using namespace std;
void write_fp()
{
ofstream ofp;//注意这里是ofstream
if(!(ofp.is_open()))
{
cout<<"打开失败"<<endl;
return;
}
ofp<<"写fdfdg";
ofp.close();
}
int main()
{
write_fp();
}
读文件的操作步骤
1.包含头文件
#include
2.创建流对象
ifstream ifs //注意这里是ifstream
3.打开文件
ifs.open(“文件路径”,打开方式);
ifs.is_open();判断是否打开成功
4.读取数据
四种读取方式
5.关闭文件
isf.close();
下面是一个读取操作的实例:
#include<iostream>
#include<fstream>//添加头文件
using namespace std;
void read_fp();
void read_fp()
{
ofstream ofp;
ofp.open("test.txt",ios::out);
ifstream ifp;//创建对象,注意是ifstream
ifp.open("text.txt",ios::in);//打开文件,设置打开方式//注意windows和linux的差异目录\\和目录/
if(!(ifp.is_open()))
{
cout<<"打开失败"<<endl;
return;
}
//读取方式1
/*char buf[1024]={0};
while(ifp>>buf)//遇到空格就进入下次循环
{
ofp<<buf;
ofp<<'\n';
cout<<buf<<endl; //这种读取方式有缺陷,它会一个字节一个字节地读取,不会保存原来的文本格式。且无法识别空格
}*/
// 读取方式第二种
/* char buf[1024]={0};
while(ifp.getline(buf,sizeof(buf)))//这种方式读取字符按行读,这种方式可以配合'\n'可以获取原来文件的文本格式。//每行结束就进入下次循环
{
cout<<buf<<endl;//测试输入的内容
ofp<<buf;//传入另外的文件
ofp<<'\n';
} */
// string str;
/*//读取方式第三种
string str;
while(getline(ifp,str))
{
cout<<str<<endl;//测试输入的内容
ofp<<str;//传入另外的文件
ofp<<'\n';
}*/
//第四种读取方式
char ch='\0';
while(((ch=ifp.get())) != _GLIBCXX_STDIO_EOF)//最EOF其实是-1//这种方式是一个字节一个字节读取,会读取所有的字符,并且保存原有格式。
{
cout<<ch<<endl;//测试输入的内容
ofp<<ch;//传如另外的文件
// ofp<<'\n';
}
ofp.close();
ifp.close();
}
int main()
{
read_fp();
return 0;
}
二进制文件的读取写操作
例子:
#include<iostream>
#include<fstream>
using namespace std;
class person
{
public:
char m_name[20];
int m_age;
};
void binary_write()
{
ofstream ops;
ops.open("bianry.txt",ios::binary|ios::out);
person p={"张三",10};
ops.write((const char*)&p,sizeof(p));
ops.close();
ifstream ips;
ips.open("bianry.txt",ios::in|ios::binary);
if(!ips.is_open())
{
cout<<"打开失败"<<endl;return;
}
person p1;
ips.read((char *)&p1,sizeof(person));
cout<<p1.m_name<<endl;
cout<<p1.m_age<<endl;
ips.close();
}
int main()
{
binary_write();
}