如何将数组内容写入硬盘

时间:2011-12-27 14:51:38

标签: c++ c arrays io

我正在尝试将非常大的char数组的内容写入硬盘。 我有以下数组(实际上它的大小将非常大) 我使用数组作为位数组,并在插入指定数量的位后,我必须将其内容复制到另一个数组并将此副本写入硬盘。然后我将数组的内容分配为0以供进一步使用。

unsigned char       bit_table_[ROWS][COLUMNS];

4 个答案:

答案 0 :(得分:5)

使用ofstreamcopyostream_iterator来充分利用STL的力量:

#include <algorithm>
#include <fstream>
#include <iterator>
#include <iostream>
#include <vector>

using namespace std;

int main() {
    unsigned char bit_table_[20][40];
    for (int i = 0 ; i != 20 ; i++)
        for (int j = 0 ; j != 40 ; j++)
            bit_table_[i][j] = i^j;
    ofstream f("c:/temp/bit_table.bin", ios::binary | ios::out);
    unsigned char *buf = &bit_table_[0][0];
    copy(buf, buf+sizeof(bit_table_), ostream_iterator<unsigned char>(f, ""));
    return 0;
}

答案 1 :(得分:4)

您应该打开一个文件进行写入,然后将数组写入其中:

FILE * f;
f = fopen(filepath, "wb"); // wb -write binary
if (f != NULL) 
{
    fwrite(my_arr, sizeof(my_arr), 1, f);
    fclose(f);
}
else
{
    //failed to create the file
}

参考文献:fopenfwritefclose

答案 2 :(得分:2)

使用文件或数据库...

文件很容易创建:

FILE * f;
int i,j;
f = fopen("bit_Table_File", "w");
for (i = 0 , i< ROWS , i++)
{
    for (j = 0 , j < COLUMNS , j++)
    {
        fprintf(f, "%2x", bit_table_[i][j]);
    }
}

要读取文件内容,可以从文件开头使用fscanf

FILE* f = fopen("myFile","r");
for (i = 0 , i< ROWS , i++)
    {
        for (j = 0 , j < COLUMNS , j++)
        {
            fscanf(f, "%2x", &(bit_table_[i][j]));
        }
    }

然而你必须安装一个数据库(和所需的表数)并使用特定的指令写入它。

答案 3 :(得分:1)

您可以将数组的值存储在文件

所以你需要

  • 包含fstream头文件并使用std :: ostream;

  • 声明一个类型为ofstream的变量

  • 打开文件

  • 检查是否存在打开文件错误

  • 使用文件

  • 在不再需要访问时关闭文件

    #include <fstream>
    using std::ofstream;
    #include <cstdlib> 
    int main()
    {
       ofstream outdata; 
       int i; // loop index
       int array[5] = {4, 3, 6, 7, 12};
      outdata.open("example.dat"); // opens the file
       if( !outdata ) { // file couldn't be opened
          cerr << "Error: file could not be opened" << endl;
          exit(1);
       }
      for (i=0; i<5; ++i)
          outdata << array[i] << endl;
       outdata.close();
    
       return 0;
    }