使用// 第一次 { 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
时间: 2024-02-03 11:14:10 浏览: 108
MAT_2_2_help.zip
这个错误可能是因为你在第二次追加数据时,指定的偏移量超出了文件的范围。你可以尝试在第二次追加数据之前,先使用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函数追加新数据,并将偏移量作为参数传递给该函数。
阅读全文