public void CanReadDataset_External(string datasetName) { // INFO: // HDF lib says "external storage not supported with chunked layout". Same is true for compact layout. TestUtils.RunForAllVersions(version => { // Arrange var absolutePrefix = datasetName == "absolute" ? Path.GetTempPath() : string.Empty; var externalFilePrefix = datasetName == "prefix" ? Path.GetTempPath() : null; var datasetAccess = new H5DatasetAccess() { ExternalFilePrefix = externalFilePrefix }; var filePath = TestUtils.PrepareTestFile(version, fileId => TestUtils.AddExternalDataset(fileId, datasetName, absolutePrefix, datasetAccess)); var expected = TestData.MediumData.ToArray(); for (int i = 33; i < 40; i++) { expected[i] = 0; } // Act using var root = H5File.OpenReadCore(filePath, deleteOnClose: true); var parent = root.Group("external"); var dataset = parent.Dataset(datasetName); var actual = dataset.Read <int>(); // Assert Assert.True(actual.SequenceEqual(expected)); }); }
public void CanReadDataset_External(string datasetName) { TestUtils.RunForAllVersions(version => { // Arrange var absolutePrefix = datasetName == "absolute" ? Path.GetTempPath() : string.Empty; var externalFilePrefix = datasetName == "prefix" ? Path.GetTempPath() : null; var datasetAccess = new H5DatasetAccess() { ExternalFilePrefix = externalFilePrefix }; var filePath = TestUtils.PrepareTestFile(version, fileId => TestUtils.AddExternalDataset(fileId, datasetName, absolutePrefix, datasetAccess)); var expected = TestData.MediumData; for (int i = 33; i < 40; i++) { expected[i] = 0; } // Act using var root = H5File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, deleteOnClose: true); var parent = root.Group("external"); var dataset = parent.Dataset(datasetName); var actual = dataset.Read <int>(); // Assert Assert.True(actual.SequenceEqual(expected)); }); }
public static unsafe void AddExternalDataset(long fileId, string datasetName, string absolutePrefix, H5DatasetAccess datasetAccess) { long res; var bytesoftype = 4; var dcpl_id = H5P.create(H5P.DATASET_CREATE); var dapl_id = H5P.create(H5P.DATASET_ACCESS); res = H5P.set_layout(dcpl_id, H5D.layout_t.CONTIGUOUS); // a (more than one chunk in file) var pathA = H5Utils.ConstructExternalFilePath(Path.Combine(absolutePrefix, $"{datasetName}_a.raw"), datasetAccess); if (File.Exists(pathA)) { File.Delete(pathA); } res = H5P.set_external(dcpl_id, pathA, new IntPtr(120), (ulong)(10 * bytesoftype)); res = H5P.set_external(dcpl_id, pathA, new IntPtr(80), (ulong)(10 * bytesoftype)); res = H5P.set_external(dcpl_id, pathA, new IntPtr(0), (ulong)(10 * bytesoftype)); // b (file size smaller than set size) var pathB = H5Utils.ConstructExternalFilePath(Path.Combine(absolutePrefix, $"{datasetName}_b.raw"), datasetAccess); if (File.Exists(pathB)) { File.Delete(pathB); } res = H5P.set_external(dcpl_id, pathB, new IntPtr(0), (ulong)(10 * bytesoftype)); // c (normal file) var pathC = H5Utils.ConstructExternalFilePath(Path.Combine(absolutePrefix, $"{datasetName}_c.raw"), datasetAccess); if (File.Exists(pathC)) { File.Delete(pathC); } res = H5P.set_external(dcpl_id, pathC, new IntPtr(0), (ulong)((TestData.MediumData.Length - 40) * bytesoftype)); // write data if (datasetAccess.ExternalFilePrefix is not null) { H5P.set_efile_prefix(dapl_id, datasetAccess.ExternalFilePrefix); } TestUtils.Add(ContainerType.Dataset, fileId, "external", datasetName, H5T.NATIVE_INT32, TestData.MediumData.AsSpan(), apl: dapl_id, cpl: dcpl_id); // truncate file b using (var fileStream2 = File.OpenWrite(pathB)) { fileStream2.SetLength(10); }; res = H5P.close(dapl_id); res = H5P.close(dcpl_id); }
public H5D_Chunk4_Implicit(H5Dataset dataset, DataLayoutMessage4 layout, H5DatasetAccess datasetAccess) : base(dataset, layout, datasetAccess) { // }
public H5Dataset_Chunk_Single_Chunk4(H5Dataset dataset, DataLayoutMessage4 layout, H5DatasetAccess datasetAccess) : base(dataset, layout, datasetAccess) { // }