文件类型
1、文本文件(文件以ASCLL码的形式存储在计算机上)
2、二进制文件(文件以文本二进制形式存在计算机,大部分看不懂)
c++对文件操作要包含头文件<fstream>
操作文件三大类
1、ofstream:写操作
2、ifstream: 读操作
3、fstream:读写操作
文本文件的写入
步骤如下:
1、包含头文件
#include<fstream>
2、创建流对象
ofstream ofs;(ofs为变量名随便起)
3、打开文件
ofs.open("文件路径",打开方式);
4、写数据
ofs<<"写出的数据";(和cout<<这个东东差不多,一个往控制台输出一个是往文件里输出,<<这个别搞混了就行)
5、关闭文件
文件打开方式
#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
ofstream ofs;//创建流对象
ofs.open("text.txt",ios::out);//在cpp文件夹下创建了一个text文本文件;
//直接和控制台输出一样的格式
ofs<<"123"<<endl;
ofs<<"456"<<endl;
ofs.close();//关闭文件
return 0;
}
如果打开方式是iOS::out他每次都是覆盖以前的文件,而不能接着以前文件写入。如果想接着以前文件写入,需要把ios::out换成(ios::out|ios::app)这样就可以了。
#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
ofstream ofs;//创建流对象
ofs.open("text.txt",ios::out|ios::app);//在cpp文件夹下创建了一个text文本文件;
//直接和控制台输出一样的格式
ofs<<"123"<<endl;
ofs<<"456"<<endl;
ofs.close();//关闭文件
return 0;
}
这是又运行一次结果。
文件的读取
#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
fstream ifs;//创建流对象
ifs.open("text.txt", ios::in);//读取文件要变成ios::in
string a;
while (ifs >> a)
cout << a << endl;
ifs.close();//关闭文件
return 0;
}
把刚刚的文件读一下
当然如果本生不存在这个文件你就读不了了,所以我们要加一个函数判断有没有这个文件
#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
fstream ifs;//创建流对象
ifs.open("text.txt", ios::in);//读取文件要变成ios::in
if (ifs.is_open())//打开成功返回true
{
string a;
while (ifs >> a)
cout << a << endl;
ifs.close();//关闭文件
}
else cout << "打开失败" << endl;
return 0;
}
我把text文件后加了个1很显然没有这个文件
如果文件格式是这样的
那就这样读
#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
fstream ifs;//创建流对象
ifs.open("text1.txt", ios::in);//读取文件要变成ios::in
if (ifs.is_open())
{
string a;
int b;
while (ifs >> a >> b)
cout << a << b << endl;
ifs.close();//关闭文件
}
else cout << "打开失败" << endl;
return 0;
}
这样就成功了,注意有时候中文汉字读取出会有乱码,这个问题有的私下问我就行。
二进制文件
1、写
#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
ofstream ofs;//创建流对象
ofs.open("text.txt", ios::out|ios::binary);/写文件要变成ios::out然后加上后面那个
string a="张三";
ofs.write((const char*)&a, sizeof(a));//需要用到write函数 第一个参数是一个const char *的类型第二个是大小
ofs.close();
return 0;
}
2、读
#include<fstream>//头文件
#include<iostream>
using namespace std;
int main()
{
ifstream ifs;//创建流对象
ifs.open("text.txt", ios::in | ios::binary);//读取文件要变成ios::in
if (!ifs.is_open()) return 0;//打开失败
char a[100];
ifs.read(a, sizeof(a));//用到read函数第一个是char *的类型
cout << a << endl;
ifs.close();
return 0;
}
最后,建议二进制文件用char 的数组少用string ,string有一些不确定的因素。
有错误欢迎指出