Чтение коротких данных из двоичного файла с использованием класса CArchive в C ++ - PullRequest
0 голосов
/ 28 декабря 2018

Я создал приложение, которое хранит массив short в файле .using CArchive class

Код для сохранения данных

CFile objFile(cstr, CFile::modeCreate | CFile::modeWrite);
CArchive obj(&objFile, CArchive::store);

obj << Number;  //int
obj << reso;    //int
obj << height;  //int
obj << width;   //int
int total = height * width;
for (int i = 0; i < total; i++)
    obj << buffer[i];//Short Array

Это кодфрагмент, который я использую для сохранения данных в файле.

Теперь я хочу открыть этот файл с помощью CArchive.

Я попытался открыть его с помощью fstream.

std::vector<char> buffer(s);
if (file.read(buffer.data(), s))
{

}

Но приведенный выше код не дает мне те же данные, что я сохраняю.Итак, может ли кто-нибудь сказать мне, как я могу получить эти данные в массиве short, используя CArchive или любую другую функцию.

1 Ответ

0 голосов
/ 30 декабря 2018

Предположим, что буфер представляет собой массив SHORT, код для загрузки данных можно записать в виде:

CFile objFile(cstr, CFile::modeRead);
CArchive obj(&objFile, CArchive::load);

obj >> Number;  //int
obj >> reso;    //int
obj >> height;  //int
obj >> width;   //int

int total = height * width;

//release the old buffer if needed... e.g: 
if( buffer ) 
    delete[] buffer;

//allocate the new buffer 
buffer = new SHORT [total];

for (int i = 0; i < total; i++) {
    obj >> buffer[i];
}

obj.Close();
objFile.Close();
...