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

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

  1. ios::in 为输入(读)而打开文件
  2. ios::out 为输出(写)而打开文件
  3. ios::ate 初始位置:文件尾
  4. ios::app 所有输出附加在文件末尾
  5. ios::trunc 如果文件已存在则先删除该文件
  6. 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);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件读写操作是 C 语言中非常常见的操作之一,可以使用文件进行文件读写。一般的文件读写程如下: 1. 打开文件:使用 `fopen()` 函数打开文件,返回文件指针。 2. 读/写文件:使用 `fread()` 或 `fwrite()` 函数进行读/写操作。 3. 关闭文件:使用 `fclose()` 函数关闭文件。 下面是一个简单的示例,演示了如何使用文件进行文件读写: ```c #include <stdio.h> int main() { FILE *fp; char buffer[100]; // 打开文件 fp = fopen("example.txt", "w+"); if(fp == NULL) { printf("无法打开文件\n"); return 1; } // 写入数据 fprintf(fp, "这是一个测试文件\n"); fputs("这是一个 fputs 测试\n", fp); // 读取数据 fseek(fp, 0, SEEK_SET); fread(buffer, sizeof(char), sizeof(buffer), fp); printf("%s", buffer); // 关闭文件 fclose(fp); return 0; } ``` 在上述示例中,我们首先使用 `fopen()` 函数打开了一个文件,并将其指针保存到 `fp` 变量中。接着,我们使用 `fprintf()` 和 `fputs()` 函数向文件写入数据。然后,我们使用 `fseek()` 函数将文件指针移动到文件开头,并使用 `fread()` 函数读取文件中的数据,将其保存到 `buffer` 数组中。最后,我们使用 `fclose()` 函数关闭文件。 需要注意的是,在进行文件读写操作时,我们需要确保文件已经正确打开,否则会导致程序崩溃。此外,我们还需要对文件进行读写权限的检查,以确保我们有足够的权限对文件进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值