void _BxrFileLevel2::TestBxrWritingCpp() { #pragma region Create File H5open(); hid_t fid = H5Fcreate("D:/folder/test.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT); #pragma endregion //////////////// #pragma region Create DS // Create dataspace with initial dim = 0 and final = UNLIMITED hsize_t startdims[1] = { 0 }; hsize_t max_dims[1] = { H5S_UNLIMITED }; hid_t file_space = H5Screate_simple(1, startdims, max_dims); // Create dataset creation property list to have chunks (chunks are required for unlimeted datasets. chunks affect performances in time and disk space: too large chunks might allocate not needed space and having a too large file; too short ones will have a lot of overhead) hid_t plist = H5Pcreate(H5P_DATASET_CREATE); H5Pset_layout(plist, H5D_CHUNKED); hsize_t chunk_dims[1] = { 100 }; H5Pset_chunk(plist, 1, chunk_dims); // Create the dataset hid_t dataset = H5Dcreate(fid, "DS", H5T_NATIVE_INT16, file_space, H5P_DEFAULT, plist, H5P_DEFAULT); H5Pclose(plist); H5Sclose(file_space); H5Dclose(dataset); #pragma endregion ////////////////// #pragma region Extend DS dataset = H5Dopen(fid, "DS", H5P_DEFAULT); // create data const size_t dataSize = 100000; int16_t dataArray[dataSize]; for (int i = 0; i < dataSize; i++) dataArray[i] = i; // Dataspace to indicate the size of our buffer in memory hsize_t dims[1] = { dataSize }; hid_t mem_space = H5Screate_simple(1, dims, NULL); // Extend the dataset by getting previous size and adding current length file_space = H5Dget_space(dataset); H5Sget_simple_extent_dims(file_space, dims, NULL); hsize_t newdims[1] = { dims[0] + dataSize }; H5Dset_extent(dataset, newdims); // Select hyperslab on the file dataset file_space = H5Dget_space(dataset); hsize_t offset[1] = { dims[0] }; hsize_t count[1] = { dataSize }; H5Sselect_hyperslab(file_space, H5S_SELECT_SET, offset, NULL, count, NULL); // Append buffer to dataset herr_t ret = H5Dwrite(dataset, H5T_NATIVE_INT16, mem_space, file_space, H5P_DEFAULT, (int16_t*)dataArray); H5Sclose(file_space); H5Sclose(mem_space); H5Dclose(dataset); #pragma endregion /////////// #pragma region Close and reopen file H5Fclose(fid); fid = H5Fopen("D:/folder/test.h5", H5F_ACC_RDWR, H5P_DEFAULT); #pragma endregion /////////// #pragma region unlink DS ret = H5Ldelete(fid, "DS", H5P_DEFAULT); #pragma endregion #pragma region close file H5Fclose(fid); #pragma region }