「C++」 输入输出流
1 引言
2 屏幕 IO
2.1 高效
3 文件 IO
3.1 二进制
3.2 文本
3.2.1 CSV
4 缓冲
5 定位
6 格式化
7 国际化
7.1 宽字符流
7.2 区域性字符流
附录
A 参考资料
- Bruce Eckel, Chuck Allison 著. 刘宗田, et al. 译. C++ 编程思想[M]. 北京:机械工业出版社, 2016.
- R.Alexande 著. 王峰. 史金虎. 译. C++ 高效编程: 内存与性能优化[M]. 北京:中国电力出版社, 2003.
- nichengwuxiao. C/C++读写文本文件、二进制文件的方法[EB/OL]. https://www.jb51.net/article/143756.htm. 2018-07-13/2019-12-10.
- Dablelv. C++ 覆盖或删除指定位置的文件内容[EB/OL]. https://blog.csdn.net/k346k346/article/details/62424763. 2017-03-16/2019-12-10.
B 代码示例
1. csv 文件读取
// read
ifstream inFile("data.csv", ios::in);
string lineStr;
vector<vector<string>> strArray;
while (getline(inFile, lineStr))
{
stringstream ss(lineStr);
string str;
vector<string> lineArray;
// split with ','
while (getline(ss, str, ','))
lineArray.push_back(str);
strArray.push_back(lineArray);
}
2. vector 读写:二进制
主要是记录下 vector size 即可;
#include <iostream>
#include <fstream>
#include <vector>
template<typename T>
bool FileOperate::LoadVector(const std::string file, std::vector<T>& buffer)
{
std::ifstream stream;
stream.open(file, std::ios::binary);
if(!stream)
{
std::cout << "open error!" << std::endl;
return false;
}
size_t size;
stream.read(reinterpret_cast<char*>(&size), sizeof(size_t));
buffer.resize(size);
stream.read(reinterpret_cast<char*>(buffer.data()), sizeof(T) * buffer.size());
stream.close();
return true;
}
template<typename T>
bool FileOperate::SaveVector(const std::string file, const std::vector<T> &buffer)
{
std::ofstream stream(file, std::ios::binary);
if(!stream)
{
std::cout << "open error!" << std::endl;
return false;
}
size_t size = buffer.size();
stream.write(reinterpret_cast<const char*>(&size), sizeof(size_t));
stream.write(reinterpret_cast<const char*>(&buffer[0]), sizeof(T) * buffer.size());
stream.close();
return true;
}
Comments