4
我正在使用HDF5 API,並且正在嘗試創建具有可變長度字符串的數據集。 的結構是HDF5:使用字符串創建數據集
struct dataX
{
std::string data;
};
我使用char[256]
使用靜態硬編碼的大小。
但我希望它是動態的,所以在閱讀HDF5 Doc後,我發現H5T_VARIABLE
並按如下方式使用它,但仍然失敗。
H5Dcreate
返回一個負值(意味着錯誤)。
hid_t mem_type;
mem_type = H5Tcopy(H5T_C_S1);
H5Tset_size(mem_type,H5T_VARIABLE);
/* Create the memory data type. */
if ((mem_type_id = H5Tcreate (H5T_COMPOUND, mem_type)) < 0) {
return -1;
}
/* Insert fields. */
if (H5Tinsert(mem_type_id, "field", 0, mem_type_id) < 0) {
return -1;
}
/* Create a simple data space with unlimited size */
// hsize_t dims[1]={0};
// hsize_t maxdimsk[1]={ H5S_UNLIMITED };
if ((sid = H5Screate_simple(1, dims, maxdims)) < 0){
return -1;
}
/* Modify dataset creation properties, i.e. enable chunking */
plist_id = H5Pcreate (H5P_DATASET_CREATE);
//chunk==1
if (H5Pset_chunk (plist_id, 1, chunk) < 0){
return -1;
}
H5Pset_alloc_time(plist_id, H5D_ALLOC_TIME_EARLY)
/* Set the fill value using a struct as the data type. */
// fill_data=0
if (fill_data)
{
if (H5Pset_fill_value(plist_id, mem_type_id, fill_data) < 0){
LOG_ERROR << "cannot fill value " << LOG_ENDL;
return -1;
}
}
else {
if (H5Pset_fill_time(plist_id, H5D_FILL_TIME_NEVER) < 0) {
LOG_ERROR << "error" << LOG_ENDL;
}
}
/* Create the dataset. */
did = H5Dcreate(loc_id, dset_name, mem_type_id, sid, plist_id)
我試過H5D_ALLOC_TIME_LATE
,想,也許,如果它分配的內存只寫它的工作之前。但它沒有。
現在我卡住了,我不知道該怎麼辦。
我錯過了什麼?