Запись и добавление массивов с плавающей точкой в единственный набор данных в файле hdf5 на C ++

Я обрабатываю количество файлов, каждая обработка файла будет выводить несколько тысяч массивов с плавающей точкой, и я будухранить данные всех файлов в одном огромном наборе данных в одном hdf5 для дальнейшей обработки.

В настоящее время я не совсем понимаю, как добавить свои данные в файл hdf5. (комментарий в коде выше) В 2 для циклов выше, как вы можете видеть, я хочу добавлять одномерный массив float в hdf5 за раз, а не как целое. Мои данные в терабайтах, и мы можем только добавить данные в файл.

Есть несколько вопросов:

Как добавить данные в этом случае? Какую функцию я должен использовать?Прямо сейчас у меня есть fdim [0] = 928347543, я пытался вставить флаг бесконечности HDF5, но выполнение во время выполнения жалуется. Есть ли способ сделать это? Я нене хочу рассчитывать данные, которые у меня есть каждый раз; Есть ли способ просто продолжать добавлять данные, не заботясь о значении fdim?

Или это невозможно?

EDIT: Я

следил за СаймономS предложение, и в настоящее время вот мой обновленный код:

hid_t desFi5;
hid_t fid1;
hid_t propList;
hsize_t fdim[2];

desFi5 = H5Fcreate(saveFilePath, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);

fdim[0] = 3;
fdim[1] = 1;//H5S_UNLIMITED;

fid1 = H5Screate_simple(2, fdim, NULL);

cout < "----------------------------------Space done\n";

propList = H5Pcreate( H5P_DATASET_CREATE);

H5Pset_layout( propList, H5D_CHUNKED );

int ndims = 2;
hsize_t chunk_dims[2];
chunk_dims[0] = 3;
chunk_dims[1] = 1;

H5Pset_chunk( propList, ndims, chunk_dims );

cout < "----------------------------------Property done\n";

hid_t dataset1 = H5Dcreate( desFi5, "des", H5T_NATIVE_FLOAT, fid1, H5P_DEFAULT, propList, H5P_DEFAULT);

cout < "----------------------------------Dataset done\n";

bufi = new float*[1];
bufi[0] = new float[3];
bufi[0][0] = 0;
bufi[0][1] = 1;
bufi[0][2] = 2;

//hyperslab
hsize_t start[2] = {0,0};
hsize_t stride[2] = {1,1};
hsize_t count[2] = {1,1};
hsize_t block[2] = {1,3};

H5Sselect_hyperslab( fid1, H5S_SELECT_OR, start, stride, count, block);     
cout < "----------------------------------hyperslab done\n";   

H5Dwrite(dataset1, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, *bufi);

fdim[0] = 3;
fdim[1] = H5S_UNLIMITED;    // COMPLAINS HERE
H5Dset_extent( dataset1, fdim );

cout < "----------------------------------extent done\n";

//hyperslab2
hsize_t start2[2] = {1,0};
hsize_t stride2[2] = {1,1};
hsize_t count2[2] = {1,1};
hsize_t block2[2] = {1,3};

H5Sselect_hyperslab( fid1, H5S_SELECT_OR, start2, stride2, count2, block2);     
cout < "----------------------------------hyperslab2 done\n";  

H5Dwrite(dataset1, H5T_NATIVE_FLOAT, H5S_ALL, H5S_ALL, H5P_DEFAULT, *bufi);

cout < "----------------------------------H5Dwrite done\n";        
H5Dclose(dataset1);
cout < "----------------------------------dataset closed\n";   
H5Pclose( propList );   
cout < "----------------------------------property list closed\n"; 
H5Sclose(fid1); 
cout < "----------------------------------dataspace fid1 closed\n";    
H5Fclose(desFi5);       
cout < "----------------------------------desFi5 closed\n";    

Ответы на вопрос(1)

Ваш ответ на вопрос