public static (long DatasetId, bool IsNew) OpenOrCreateDataset(long locationId, string datasetPath, long datasetTypeId, Func <long> createDatasetCallback) { Contract.Requires(createDatasetCallback != null); long datasetId = -1; long datasetTypeId_actual = -1; bool isNew; try { if (IOHelper.CheckLinkExists(locationId, datasetPath)) { datasetId = H5D.open(locationId, datasetPath); datasetTypeId_actual = H5D.get_type(datasetId); if (H5T.equal(datasetTypeId_actual, datasetTypeId) <= 0) { throw new Exception($"{ ErrorMessage.IOHelper_DataTypeMismatch } Dataset: '{ datasetPath }'."); } isNew = false; } else { datasetId = createDatasetCallback.Invoke(); isNew = true; } if (H5I.is_valid(datasetId) <= 0) { throw new Exception($"{ ErrorMessage.IOHelper_CouldNotOpenOrCreateDataset } Dataset: '{ datasetPath }'."); } } finally { if (H5I.is_valid(datasetTypeId_actual) > 0) { H5T.close(datasetTypeId_actual); } } return(datasetId, isNew); }
public static (long GroupId, bool IsNew) OpenOrCreateGroup(long locationId, string groupPath) { long groupId = -1; long propertyId = -1; bool isNew; try { if (IOHelper.CheckLinkExists(locationId, groupPath)) { groupId = H5G.open(locationId, groupPath); isNew = false; } else { propertyId = H5P.create(H5P.LINK_CREATE); H5P.set_create_intermediate_group(propertyId, 1); groupId = H5G.create(locationId, groupPath, propertyId); isNew = true; } if (H5I.is_valid(groupId) <= 0) { throw new Exception($"{ ErrorMessage.IOHelper_CouldNotOpenOrCreateGroup } Group name: '{ groupPath }'."); } } finally { if (H5I.is_valid(propertyId) > 0) { H5P.close(propertyId); } } return(groupId, isNew); }