less than 1 minute read

1 引言

2 屏幕 IO

2.1 高效

3 文件 IO

3.1 二进制

二进制读写 vector 示例二进制读写 Mat 示例

3.2 文本

3.2.1 CSV

读取示例

4 缓冲

5 定位

6 格式化

7 国际化

7.1 宽字符流

7.2 区域性字符流


TOP

附录

A 参考资料

  1. Bruce Eckel, Chuck Allison 著. 刘宗田, et al. 译. C++ 编程思想[M]. 北京:机械工业出版社, 2016.
  2. R.Alexande 著. 王峰. 史金虎. 译. C++ 高效编程: 内存与性能优化[M]. 北京:中国电力出版社, 2003.
  3. nichengwuxiao. C/C++读写文本文件、二进制文件的方法[EB/OL]. https://www.jb51.net/article/143756.htm. 2018-07-13/2019-12-10.
  4. 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