ifstream/ofstream
get put
read write
>> << 内置类型/自定义类型
实现写读文件
1、二进制读写
2、文本读写
内存分数据类型,磁盘不分
二进制读写
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include <string>
#include<fstream>
using namespace std;
struct ServerInfo
{
char _address[32];
double _x ;
};
//写到文件
//读出来
//1、二进制读写
//2、文本读写
//内存分数据类型,磁盘不分
class BinIO
{
private:
string _filename;
public:
// 构造函数,初始化文件名
BinIO(const char* filename = "info.bin")
:_filename(filename)//初始化
{}
//写——把ServerInfo里面的winfo写出去
void Write(const ServerInfo&winfo)
{
//创建文件输出流对象ofs,将数据写入文件中
//ofstream ofs(_filename, ios_base::out);
ofstream ofs(_filename, ofstream::out|ofstream::binary);
ofs.write((char*)&winfo, sizeof(winfo));
}
//读——把文件中的数据写出去
void Read(ServerInfo& rinfo)
{
ifstream ifs(_filename, ofstream::in | ofstream::binary);
ifs.read((char*)&rinfo, sizeof(rinfo));
}
};
//写文件调用
//写
int main()
{
ServerInfo winfo = { "192.0.0.1",12.13 };
BinIO bin;
bin.Write(winfo);
return 0;
}
//读文件调用
int main()
{
ServerInfo info;
BinIO bin;
bin.Read(info);
return 0;
}
//结果如下
尝试用string
发现只要是容器都要小心,不能用二进制方式写容器
否则可能会出现野指针(在不同进程中是野指针)
要不然就是浅拷贝(相同进程中)
文本读写
c/c++转string方式
函数转化
//c
double x = 1.111;
char buff[128];
sprintf(buff, "%lf", x);
//c++
to_string(x);
return 0;
流插入和流提取转换
ofstream ofs(_filename);
ofs << winfo._address;
ofs << winfo._x;
一些乱七八糟的小记:
从内存流动到硬盘
文件
单个字符
fgetc fputc
一段字符串\内存
fread fwrite
进行格式化
fprintf fscanf