как записать содержимое массива на жесткий диск - PullRequest
2 голосов
/ 27 декабря 2011

Я пытаюсь записать содержимое очень большого массива char на жесткий диск.У меня есть следующий массив (на самом деле его размер будет очень большим) Я использую массив в качестве битового массива, и после вставки в него указанного количества бит, я должен скопировать его содержимое в другой массив и записать эту копиюна жесткий диск.Затем я очищаю содержимое массива, присваивая ему 0 для дальнейшего использования.

unsigned char       bit_table_[ROWS][COLUMNS];

Ответы [ 4 ]

5 голосов
/ 27 декабря 2011

Используйте 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;
}
4 голосов
/ 27 декабря 2011

Вы должны открыть файл для записи, а затем записать в него массив:

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
}

Ссылки: fopen, fwrite,fclose

2 голосов
/ 27 декабря 2011

Использовать файл или базу данных ...

файл легко создать:

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]));
        }
    }

, тогда как вы должны установить базу данных (и необходимое количество таблиц) и использовать специальные инструкции для записи в нее.

1 голос
/ 27 декабря 2011

Вы можете сохранить значение массива в файле

, поэтому вам нужно

  • включить файл заголовка 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;
    }
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...