2011-12-27 2 views
1

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

unsigned char  bit_table_[ROWS][COLUMNS]; 
+0

Вы используете C или C++? Решения могут быть разными. – crashmstr

+0

@crashmstr: все в порядке, но я был бы доволен C++ – John

+0

Вам нужно его скопировать? Почему бы просто не помещать существующий массив в поток или пул для записи на диск и создать новый пустой? –

ответ

3

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

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

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

файл прост в создании:

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

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

+0

Мне это нравится, потому что файл доступен для чтения. Вам нужно закрыть файлы, и я бы добавил разделитель, возможно, запятую, в спецификации типа «% 2x», –

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

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

так что вам нужно

  • включают 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; 
    } 
    
Смежные вопросы