首页 > 编程语言 >C++二进制文件的读写

C++二进制文件的读写

时间:2024-05-28 14:46:40浏览次数:27  
标签:std filePath 二进制 读写 ifs C++ write ofs size

二进制文件的读取:

void TransformSession::generateData(const std::string& filePath, std::vector<uint8_t>& data) {
  std::ifstream ifs(filePath, std::ios::binary);
  if (!ifs) {
    SPDLOG_ERROR("failed to open read file: {}", filePath);
    return;
  }

  // file size
  ifs.seekg(0, std::ios::end);
  std::streamsize size = ifs.tellg();
  ifs.seekg(0, std::ios::beg);

  data.resize(size);
  ifs.read(reinterpret_cast<char*>(data.data()), size);
  ifs.close();
}

二进制文件的写入:

void writeBinareFileOnce(const std::string& filePath, char* buffer, size_t size) {
  std::ofstream ofs(filePath, std::ios::binary);
  if (!ofs) {
    SPDLOG_ERROR("failed to open write file: {}", filePath);
    return;
  }

  ofs.write(buffer, size);
  ofs.close();
}

实际操作中发现,较大文件分块写入的效率要高于一次性整体写入:

void writeBinareFile(const std::string& filePath, char* buffer, size_t size) {
  std::ofstream ofs(filePath, std::ios::binary);
  if (!ofs) {
    SPDLOG_ERROR("failed to open write file: {}", filePath);
    return;
  }

  size_t chunkSize = 32 * 1024;
  size_t offset = 0;
  while (offset < size) {
    size_t size_to_write = std::min(chunkSize, size - offset);
    ofs.write(buffer + offset, size_to_write);
    offset += size_to_write;
  }
  ofs.close();
  return;
}

标签:std,filePath,二进制,读写,ifs,C++,write,ofs,size
From: https://www.cnblogs.com/sunwenqi/p/18217968

相关文章

  • C++Primer Plus对象和类的练习,练习10.10类和对象 练习2默认参数和重载
    2.下面是一个非常简单的类定义:classPerson{private:staticconstLIMIT=25;stringlname;//Person’slastnamecharfname[LIMIT];//Person’sfirstnamepublic:Person()(lname=“”;fname[0]=0’;}//#1Person(conststring&ln,constchar*fn=“Heyyou”);//......
  • c++ rand
     在C++中,可以使用<cstdlib>头文件中的rand()函数生成随机数。这个函数会生成一个介于0和RAND_MAX(通常是32767)之间的伪随机整数。通常情况下,你可能还需要使用srand()函数来设置随机数生成器的种子。下面是一个简单的示例,展示了如何在C++中使用rand()函数生成随......
  • c/c++ 时间函数
     1time()头文件:time.h函数原型:time_ttime(time_t*timer)功能:获取当前的系统时间,返回的结果是一个time_t类型,其实就是一个大整数(long),其值表示从CUT(CoordinatedUniversalTime)时间1970年1月1日00:00:00(称为UNIX系统的Epoch时间)到当前时刻的秒数。然后调用localtime将......
  • 图像处理之计算物体的方向(C++)
    图像处理之计算物体的方向(C++)文章目录图像处理之计算物体的方向(C++)前言一、PCA获取物体主要方向1.原理2.代码实现二、Hu矩获取物体主要方向1.原理2.代码实现总结前言在图像处理中,物体的方向(倾斜角度)计算的应用非常常见,总结如下方法:PCA获得物体的主要方向以及Hu......
  • 基于C++的二叉树的创建与遍历(免费提供源码)
    下载地址如下:上传明细-CSDN创作中心项目介绍背景二叉树作为一种常见的数据结构,在计算机科学和编程实践中占有重要地位。它广泛应用于搜索算法、排序算法、表达式解析、符号表以及各种数据库索引结构中。因此,掌握二叉树的创建和遍历是计算机科学领域的一项基本技能。本项目......
  • C++中定义和声明的区别
     直接上例子在类里面声明(这里以静态数据成员和静态成员函数为例)classMyClass{public:staticintstaticDataMember;//静态数据成员的声明staticvoidstaticFunction();//静态成员函数的声明//其他成员...};在cpp文件中定义 静态成员的声明......
  • 【c++基础(三)】类和对象中--构造和析构函数
    1.前言本章重点本篇文章着重讲解类中的两个默认函数,分别为:构造函数,析构函数这是c++六个默认成员函数中的两个(其他四个在后面章节讲解) 我们平时在写基础的数据机构时,例如栈和队列如果自己没有注意没有进行初始化,就有可能导致出错,同理,在写完代码后,忘记销毁开辟好......
  • c++函数
    哈喽大家好,我是@菜就多练,输不起,就别玩,今天我来和大家分享函数函数就是在主函数上方的位置写,但也可以在下面写,常见函数类型有intdoubleboolstringchar.......不同函数类型它们的用法也不同,有判断的(bool),有计算的(intlonglong double),还有字符串的(charstring)等等等等那......
  • c++ 类型转换
     ========在C++中,类型转换(typeconversion)是将一个数据类型的变量转换为另一个数据类型的变量的过程。类型转换可以分为隐式转换(implicitconversion)和显式转换(explicitconversion)。下面详细介绍C++中的类型转换方式。隐式转换隐式转换也称为自动类型转换,是由编译器自动......
  • c++动态内存管理干货
     c++兼容c所以之前C语言使用的方式在c++中同样可以使用,但c++给出了更加简便的动态内存管理方法.1.申请内置类型空间c++定义了新的关键字new和delete(都是操作符不是函数),使用方法如图:需要注意的是,用new申请空间默认不会初始化,但是可以初始化。如图:另外,【】里面可以是变量:......