#include <iostream>
#include <string>
#include <fstream>
using namespace std;
/*
文件操作
通过文件可以将数据持久化
c++ <fstream>
文件类型分为两种
1.文本文件 文件以文本的ASCII码存贮在计算机中
2.二进制文件的二进制形式存储在计算机中,用户一般不能读懂他们
操作文件的三大类
1.ofstream 写操作
2.ifstream 读操作
3.fstream 读写操作
写文件五个步骤
1.包含头文件
#include<fstream>
2.创建流对象
ofstream ofs;
3.打开文件夹
ofs.open(文件路径, 打开方式) 相对路径1. ./表示当前目录下 2. ../表示当前目录的上一级目录 绝对路径 "E:\\a\\b\\c.txt"
打开方式
ios::in 为读文件而打开文件
ios::out 为写文件而打开文件
ios::ate 初始位置:文件尾
ios::app 追加方式写文件
ios::trunc 如果文件存在先删除,再创建
ios::binary 二进制文件
文件打开方式可以配合使用 利用|操作
用二进制方式写文件 ios::binary | ios::out
4.写数据
ofs<<"写入数据"
5.关闭文件
ofs.close()
读文件的五个步骤
1.#include<fstream>
2.创建对象流 ifstream ifs;
3.打开文件并且判断文件是否打开成功
ifs.open(文件路径, 打开方式)
4.读数据->四种读取方式
5.关闭文件 ifs.close()
*/
class Person
{
public:
char name[50];
int age;
};
void writing()
{
// 写文件的五个步骤
ofstream ofs;
ofs.open("D:\\user\\desk\\1.txt", ios::out);
ofs << "2023/01/10";
ofs.close();
}
void opening()
{
ifstream ifs;
ifs.open("D:\\user\\desk\\1.txt", ios::in); // bool类型
if (!ifs.is_open())
{
cout << "failing to open" << endl;
return;
}
// 读文件
// 方式1.
// char buf[1024] = {0};
// while (ifs >> buf) // 按照行读取
// {
// cout << buf << endl;
// }
// 方式2.
// char buf[1024] = {0};
// while (ifs.getline(buf, sizeof(buf)))
// {
// cout << buf << endl;
// }
// 方式3
// string buf;
// while (getline(ifs, buf))
// {
// cout << buf << endl;
// }
// 方式4 将文件按照字符输出
char c;
while ((c = ifs.get()) != EOF) // EOF是文件结尾
{
cout << c;
}
ifs.close();
}
// 二进制文件的读写 写文件利用流对象调用成员函数write 函数原型是 ostream& wirte(const char * buffer, int len)
void binOpen()
{
// 创建二进制 流对象
ofstream ofs("D:\\user\\desk\\1.txt", ios::out | ios::binary);
// 写文件
Person p = {"lll", 15};
ofs.write((const char *)&p, sizeof(Person));
ofs.close();
}
// 二进制文件的读文件 利用流对象调用成员函数read
void binRead()
{
// 创建流对象
ifstream ifs;
// 打开文件 判断文件是否成功打开 ios::in 为读文件而打开
ifs.open("D:\\user\\desk\\1.txt", ios::in | ios::binary);
if (!ifs.is_open())
{
cout << "FILE IS TILE" << endl;
return;
}
Person p;
ifs.read((char *)&p, sizeof(p));
cout << p.age << "\t" << p.name << endl;
ifs.close();
}
int main()
{
// writing();
// opening();
// binOpen();
binRead();
return 0;
}
06-19
06-23
4019
