您的位置:首页 > 编程语言 > C语言/C++

利用C++文件流进行数据块的读写

2015-07-14 10:42 309 查看
科研项目上遇到一个文件流的读写问题,要把一个图片像素大小(1392*1038)的矩阵(double型)数据写入磁盘,一开始是用ofstream将数据逐个写入txt文件中,这样做的结果就是写出的文件太大,不利于存储和转移,而且读写速度奇慢,很影响后续工作的速度。还好最近看了leveldb的源码,知道用ofstream的read、write函数将内存中的一块数据与磁盘进行读写。尝试了下,速度和文件的大小都大大改善。

打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:

ios::in 为输入(读)而打开文件

ios::out 为输出(写)而打开文件

ios::ate 初始位置:文件尾

ios::app 所有输出附加在文件末尾

ios::trunc 如果文件已存在则先删除该文件

ios::binary 二进制方式

具体的如果你要像我一样将内存中的一块数据写入磁盘,就要设置打开方式ios::binary,默认是ios::text;

读写时,记得将指向内存中数据块的指针转化为char*;

源码如下:

__int64 buffsize = sizeof(double)*W_I_D_T_H*H_E_I_G_H_T;

ifstream H1("./pd_bmp/pd_R_X_1.bin",ios::in|ios::binary);
double *h1 = new double[W_I_D_T_H*H_E_I_G_H_T];
//图像尺寸W_I_D_T_H*H_E_I_G_H_T
H1.read((char*)h1,buffsize);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: