一,文本文件
1,写文件
主要步骤
1,包含头文件
#include
2,创建流对象
ofstream ofs;
3.打开文件
ofs.open(“文件路径”,打开方式);
4.写数据
ofs<<“写入的数据”;
5,关闭文件
ofs.close();
文件打开方式
打开方式 | 解释 |
---|---|
ios::in | 为读文件打开文件 |
ios::out | 为了写文件而打开文件 |
iOS::ate | 初始位置:文件尾 |
ios:trunc | 如果文件存在先删除再创建 |
ios::binary | 二进制方式 |
打开方式可以配合使用,用|操作符
例如: 用二进制方式写文件:ios::binary| ios::out
代码展示:
#include<fstream>
#include<iostream>
using namespace std;
void text1()
{
//包含头文件
//创建流对象
ofstream ofs;
//指定打开方式
ofs.open("C:\\Users\\Lenovo\\Desktop\\code\\c++\\mytext.txt", ios::out);
ofs << "这是我的第一个文件操作" << endl;
ofs << "helloworld" << endl;
ofs.close();
return;
}
int main()
{
text1();
return 0;
}
编译运行之后便会在对应的文件之中写入相应的文件内容
2,读文件
读文件的步骤如下:
- 包含头文件
#include - 创建流对象: ifstream ifs;
- 打开文件并判断文件是否打开成功: ifs.open(“文件路径”,打开方式);
- 读数据: 四种读数据的方式
- 关闭文件:ifs close();
- 实际上就是将文件中的内容用代码之中的字符串,数组,字符来存储
#include<fstream>
#include<iostream>
#include<string>
using namespace std;
void text1()
{
//包含头文件
//创建流对象
ofstream ofs;
//指定打开方式
ofs.open("C:\\Users\\Lenovo\\Desktop\\code\\c++\\mytext.txt", ios::out);
ofs << "这是我的第一个文件操作" << endl;
ofs << "helloworld" << endl;
ofs.close();
return;
}
void text2()
{
ifstream ifs;
ifs.open("C:\\Users\\Lenovo\\Desktop\\code\\c++\\mytext.txt", ios::in);
if (!ifs.is_open())
{
cout << "运行失败" << endl;
return;
}
//读数据
char buf[1023];
memset(buf, 0, sizeof(buf));
/*while (ifs.getline(buf, sizeof(buf)))
{
cout << buf << endl;//遇到空格不会换行
}*/
//<<会把空格当成终止条件导致无法输出空格信息
/*while (ifs >> buf)
{
cout << buf << endl;//遇到空格会换行
}*/
string Buf;
/*while (getline(ifs, Buf))
{
cout << Buf << endl;
}*/
char c;
while ((c = ifs.get()) != EOF)//EOF end of file
{
cout << c;
}
ifs.close();
}
int main()
{
text2();
return 0;
}
二,二进制文件
以二进制的方式对文件进行读写操作
打开方式指定为ios::binary
写文件
- 二进制方式写文件主要利用流对象调用成员函数write
- 函数原型:ostream& write(const char* buffer,int len);
- 参数解释:字符指针buffer指向内存之中的一段储存空间愣是读写的字节数
读文件
- string类型的读取要用字符数组代替
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class person
{
public:
int age;
char name[100];
};
void write()
{
ofstream ofs;
//二进制方式打开并写
ofs.open("C:\\Users\\Lenovo\\Desktop\\code\\c++\\binary.txt", ios::out | ios::binary);
person p = { 18,"罗亮" };
ofs.write((const char*)&p, sizeof(person));
ofs.close();
}
void read()
{
fstream ifs;
ifs.open("C:\\Users\\Lenovo\\Desktop\\code\\c++\\binary.txt", ios::in | ios::binary);
//创建一个p用于接收二进制文件之中的信息
if (!ifs.is_open())
{
cout << "无法打开" << endl;
return;
}
person P;
//读取文件的内容
ifs.read((char *)&P, sizeof(P));
//关闭文件
cout << P.age << P.name << endl;
ifs.close();
return;
}
int main()
{
write();
read();
return 0;
}