проблема с записью в существующий набор данных hdf5dotnet

у меня возникают проблемы, когда я пишу в существующий набор данных с помощью hdf5dotnet. Я много раз пишу во время выполнения, и только первая запись работает отлично. второй перезаписывает первые данные. Как вы можете видеть на экране, 4-е первые значения верны, а 4-е последнее - нет, но пространство для них нормально создано. Я забыл сказать это, но значения двойного типа.

Скриншот

код, который я использую, есть, я новичок в этом техно, если у вас есть идея, я с удовольствием воспользуюсь этим! Пожалуйста, дайте мне советы по записи в конце моего набора данных без перезаписи.

                      return;
            try {
                H5DataSpaceId dataSpaceId = H5D.getSpace(dataSetId);
                int rank = H5S.getSimpleExtentNDims(dataSpaceId);
                long[] dims = H5S.getSimpleExtentDims(dataSpaceId);
                H5D.getCreatePropertyList(dataSetId);
                long[] dims_extended = dims[0] is 1 ? new long[] { (dims[0] + data.Length) - 1 } : new long[] { (dims[0] + data.Length) };
                H5D.setExtent(dataSetId, dims_extended);
                H5S.selectHyperslab(dataSpaceId, H5S.SelectOperator.SET, new long[] { dims[0] }, new long[] { data.Length });
                H5S.create_simple(rank, dims_extended);
                H5Array<float> hdf_data = new H5Array<float>(data);
                H5DataTypeId dataTypeId = H5D.getType(dataSetId);
                H5D.write(dataSetId, dataTypeId, hdf_data);
            } catch (HDFException e) {
                MessageBox.Show(e.Message);
            }```

1 ответ

моя ошибка заключалась в размере созданного нового пространства данных и в получении идентификатора пространства данных после вызова selectHyperslab

                      int rank = H5S.getSimpleExtentNDims(dataSpaceId);
                long[] dims = H5S.getSimpleExtentDims(dataSpaceId);
                Console.WriteLine("il est ici le value mec: {0}", dims[0]);
                H5PropertyListId propertiesId = H5D.getCreatePropertyList(dataSetId);
                long[] block = new long[] { 1, 1 };
                long[] dims_extended = new long[] { (dims[0] + data.Length), 1 };
                H5D.setExtent(dataSetId, dims_extended);
                dataSpaceId = H5D.getSpace(dataSetId);
                H5S.selectHyperslab(dataSpaceId, H5S.SelectOperator.SET, new long[] { dims[0], 0 }, new long[] { dims_extended[0] - dims[0], 1 });
                long[] newdims = H5S.getSimpleExtentDims(dataSpaceId);
                H5DataSpaceId SpaceId = H5S.create_simple(1, new long[] { dims_extended[0] - dims[0], 1 });
                H5Array<double> hdf_data = new H5Array<double>(data);
                H5DataTypeId dataTypeId = H5D.getType(dataSetId);
                H5D.write(dataSetId, dataTypeId, SpaceId, dataSpaceId, new H5PropertyListId(H5P.Template.DEFAULT), hdf_data);
                H5S.close(dataSpaceId); ```
Другие вопросы по тегам