H5Dwrite(): file selection+offset not within extent
时间: 2024-02-01 09:12:14 浏览: 130
这个错误通常是由于在写入HDF5文件时使用了超出文件大小范围的选择器和偏移量导致的。也可能是由于没有正确初始化数据集或数据空间而导致的。
您可以检查您的选择器和偏移量是否正确,并确保它们不超出文件大小范围。如果您使用的是动态创建的数据集,请确保正确设置数据集大小和空间。
此外,您还可以检查您的HDF5库版本,以确保它是最新版本。如果问题仍然存在,请提供更多信息,例如您的代码段和HDF5文件的结构,以便更好地帮助您解决问题。
相关问题
H5Dwrite(): file selection+offset not within extent major: Dataspace minor: Out of range
这个错误通常表示您正在尝试在HDF5文件中写入数据时,数据选择超出了数据集的范围。可能是数据集不存在,或者您正在尝试写入超出数据集范围的数据。
您可以检查您的代码中使用的HDF5库函数,确保您正确地指定了数据集的名称和大小。还可以检查您的数据选择是否正确,并且不超出数据集的范围。如果问题仍然存在,您可以尝试使用HDF5库提供的调试工具来进一步诊断问题。
使用// 第一次 { mat_t* mat = Mat_CreateVer("D:/MatioTest/test.mat", NULL, MAT_FT_MAT73); size_t dims[2] = { 60000, 16 }; matvar_t* newVar = Mat_VarCreate("data",matio_classes::MAT_C_SINGLE, matio_types::MAT_T_SINGLE, 2, dims, newData, 0); int success = Mat_VarWriteAppend(mat, newVar,MAT_COMPRESSION_NONE,2); qDebug()<<success; } // 第二次 { mat_t* mat = Mat_Open("D:/MatioTest/test.mat",MAT_ACC_RDWR); size_t dims[2] = { 190000, 16 }; matvar_t* newVar = Mat_VarCreate("data",matio_classes::MAT_C_SINGLE, matio_types::MAT_T_SINGLE, 2, dims, newData1, 0); int success = Mat_VarWriteAppend(mat, newVar,MAT_COMPRESSION_NONE,2); qDebug()<<success; Mat_Close(mat); } 第二次追加数据报错 H5Dwrite(): file selection+offset not within extent
这个错误可能是因为你在第二次追加数据时,指定的偏移量超出了文件的范围。你可以尝试在第二次追加数据之前,先使用Mat_VarRead来读取文件中的数据,并获取文件中已有数据的维度信息,然后根据这些信息来计算新数据的偏移量。具体实现可以参考以下示例代码:
```
mat_t* mat = Mat_Open("D:/MatioTest/test.mat",MAT_ACC_RDWR);
matvar_t* var = Mat_VarRead(mat, "data");
if (var == NULL) {
// error handling
}
size_t* dims = var->dims;
size_t offset = dims[0] * dims[1]; // 计算偏移量
Mat_VarFree(var);
size_t newDims[2] = { 190000, 16 };
matvar_t* newVar = Mat_VarCreate("data",matio_classes::MAT_C_SINGLE, matio_types::MAT_T_SINGLE, 2, newDims, newData1, 0);
int success = Mat_VarWriteAppend(mat, newVar,MAT_COMPRESSION_NONE,offset);
qDebug()<<success;
Mat_Close(mat);
```
在上面的代码中,我们首先使用Mat_VarRead函数读取文件中的数据,并获取其维度信息。然后根据已有数据的维度信息计算新数据的偏移量,最后使用Mat_VarWriteAppend函数追加新数据,并将偏移量作为参数传递给该函数。
阅读全文