2017-01-05 1 views
1

Я использую библиотеку CPF HDF5 на платформе Windows. В принципе, я хочу написать составной тип данных в файл H5, содержащий std :: string.Как написать stl :: string в файл HDF5 в C++

Этот код не дает какой-либо ошибки, но при записи в файл H5 пишет мусора значение ...

Guys любой намек полезно ...

Вот мой код: -

#include <H5Cpp.h > 
#include <vector> 
#include <string> 
#include <iostream> 

using namespace std; 
using namespace H5; 


/**Compound datatype with STL Datatype*/ 
struct PostProcessingData 
{ 
    std::string datatype; 
}; 
void main() 
{ 
    H5File file("ResultData.h5",H5F_ACC_TRUNC); 
    Group grp(file.createGroup("PostProcessing")); 

    PostProcessingData data; 
    data.datatype = "stress:xx"; 

    // create spatial structure of data 
    hsize_t len = 1; 
    hsize_t dim[1] = {len}; 
    int rank = 1; 
    DataSpace space(rank,dim); 

    // write required size char array 
    hid_t strtype = H5Tcopy (H5T_C_S1); 
    H5Tset_size (strtype, H5T_VARIABLE); 

    //defining the datatype to pass HDF55 
    H5::CompType mtype(sizeof(PostProcessingData)); 
    mtype.insertMember("Filename", HOFFSET(PostProcessingData, datatype), strtype); 


    DataSet dataset = grp.createDataSet("subc_id2",mtype,space); 
    dataset.write(&data,mtype); 
    space.close(); 
    mtype.close(); 
    dataset.close(); 
    grp.close(); 
    file.close(); 
    exit(0); 
} 
+0

Может ли один помочь мне здесь? –

ответ

1

У меня есть следующее обходное решение для хранения строки в HDF5: - Мне нужно преобразовать std :: string в указатель char *. HDF5 очень хорош с сырым типом данных.

#include "H5Cpp.h" 
#include <vector> 
#include <string> 
#include <iostream> 


using namespace std; 
using namespace H5; 


/**Compound datatype with STL Datatype*/ 
struct PostProcessingData 
{ 
    char* datatype; 
}; 

void main() 
{ 
    H5File file("ResultData.h5",H5F_ACC_TRUNC); 
    Group grp(file.createGroup("PostProcessing")); 

    PostProcessingData data; 
    std::string dt = "stress:xx"; 
    data.datatype = new char[dt.length()]; 
    data.datatype = const_cast<char*> (dt.data()); 

    // create spatial structure of data 
    hsize_t len = 1; 
    hsize_t dim[1] = {len}; 
    int rank = 1; 
    DataSpace space(rank,dim); 

    // write required size char array 
    hid_t strtype = H5Tcopy (H5T_C_S1); 
    H5Tset_size (strtype, H5T_VARIABLE); 

    //defining the datatype to pass HDF55 
    H5::CompType mtype(sizeof(PostProcessingData)); 
    mtype.insertMember("Filename", HOFFSET(PostProcessingData, datatype), strtype); 


    DataSet dataset = grp.createDataSet("subc_id2",mtype,space); 
    //While writing data to file it gives following error 
    dataset.write(&data,mtype); 
    space.close(); 
    mtype.close(); 
    dataset.close(); 
    grp.close(); 
    file.close(); 
    exit(0); 

} 

Вот файл снимка: - enter image description here

Смежные вопросы