我正在尝试将非常大的char数组的内容写入硬盘。 我有以下数组(实际上它的大小将非常大) 我使用数组作为位数组,并在插入指定数量的位后,我必须将其内容复制到另一个数组并将此副本写入硬盘。然后我将数组的内容分配为0以供进一步使用。
unsigned char bit_table_[ROWS][COLUMNS];
答案 0 :(得分:5)
使用ofstream
,copy
和ostream_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
}
答案 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; }