前言
大家好吖,欢迎来到 YY 滴 系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁
主要内容含:
欢迎订阅 YY滴C++专栏!更多干货持续更新!以下是传送门!
- YY的《C++》专栏
- YY的《C++11》专栏
- YY的《Linux》专栏
- YY的《数据结构》专栏
- YY的《C语言基础》专栏
- YY的《初学者易错点》专栏
- YY的《小小知识点》专栏
- YY的《单片机期末速过》专栏
- YY的《C++期末速过》专栏
目录
- 一.C++文件IO流基本知识
- 1)采用文件流对象操作文件的一般步骤:
- 2)定义一个文件流对象
- 3)文件内容的数据格式分类
- 4)从“输入输出”角度理解——>文件IO和基础IO记忆(cout&cin)
- 二.C++文件IO流操作完整演示(代码)
一.C++文件IO流基本知识
1)采用文件流对象操作文件的一般步骤:
- 定义一个文件流对象
- 使用文件流对象的成员函数打开一个磁盘文件,使得文件流对象和磁盘文件之间建立联系
- 使用提取和插入运算符对文件进行读写操作,或使用成员函数进行读写
- 关闭文件
2)定义一个文件流对象
C++中定义一个文件流对象有三种
- ifstream ifile(只输入用)
- ofstream ofile(只输出用)
- fstream iofile(既输入又输出用)
3)文件内容的数据格式分类
- C++根据文件内容的数据格式分为 二进制文件 和 文本文件
4)从“输入输出”角度理解——>文件IO和基础IO记忆(cout&cin)
- 在基础IO中——cout是读操作,cin是写操作
- 而在文件IO中——cout是写操作,cin是读操作
- 我们可以这么理解:
- 基础IO中,我们操作的对象是键盘,输入对象是显示器,cout把程序的内容输出给显示器(读),cin把键盘的内容输出给显示器(写);
- 在文件IO中,我们操作的对象是文件,cout把程序的内容输出给文件(写),cin把文件输出给显示器(读);
二.C++文件IO流操作完整演示(代码)
struct ServerInfo
{char _address[32];// 二进制读写不能用string vector这样的对象存数据// 否则写出去就是一个指针,进程结束就是野指针,另一个进程再读进来进坑了//string _address;int _port;Date _date;
};struct ConfigManager
{
public:ConfigManager(const char* filename = "file.txt"):_filename(filename){}// 二进制读写 -- 简单高效,缺点:写到文件中的内容看不懂void WriteBin(const ServerInfo& info){ofstream ofs(_filename, ios_base::out | ios_base::binary);//定义一个文件流对象ofs.write((const char*)&info, sizeof(info));}void ReadBin(ServerInfo& info){ifstream ifs(_filename, ios_base::in | ios_base::binary);//定义一个文件流对象ifs.read((char*)&info, sizeof(info));}//文本读写void WriteText(const ServerInfo& info){ofstream ofs(_filename);//定义一个文件流对象ofs << info._address << " " << info._port << " " << info._date;}void ReadText(ServerInfo& info){ifstream ifs(_filename);//定义一个文件流对象ifs >> info._address >> info._port >> info._date;}
private:string _filename; // 配置文件
};int main()
{ServerInfo winfo = { "192.0.0.1111111111111111111", 80, { 2022, 4, 10 } };ConfigManager cm("test.bin");cm.WriteBin(winfo);return 0;
}int main()
{ConfigManager cf_bin("test.bin");ServerInfo rbinfo;cf_bin.ReadBin(rbinfo);cout << rbinfo._address << " " << rbinfo._port << " " << rbinfo._date << endl;return 0;
}int main()
{ServerInfo winfo = { "192.0.0.1111111111111111111", 80, { 2022, 4, 10 } };ConfigManager cm("test.txt");cm.WriteText(winfo);return 0;
}int main()
{ConfigManager cf_bin("test.txt");ServerInfo rbinfo;cf_bin.ReadText(rbinfo);cout << rbinfo._address << " " << rbinfo._port << " " << rbinfo._date << endl;return 0;
}int main()
{ifstream ifs("Test.cpp");char ch;while (ifs.get(ch)){cout << ch;//全读}return 0;
}