@@ -23,79 +23,22 @@ function h5save(filename, varname, A, opts)
2323% coerce if needed
2424A = coerce_ds(A , opts .type );
2525
26- if isfile(filename ) && h5exists(filename , varname )
27- exist_file(filename , varname , A , opts .size )
28- else
29- new_file(filename , varname , A , opts .size )
30- end
31-
32- end % function
33-
34-
35- function exist_file(filename , varname , A , sizeA )
36-
37- import stdlib .hdf5nc .h5size
38-
39- diskshape = h5size(filename , varname );
40- if length(diskshape ) >= 2
41- % start is always a row vector, regardless of shape of array
42- start = ones(1 ,ndims(A ));
43- elseif ~isempty(diskshape )
44- start = 1 ;
45- end
46-
47- if isempty(sizeA )
48- sizeA = defaultSize(A );
49- end
50-
51- if isscalar(A )
52- h5write(filename , varname , A )
53- elseif all(diskshape == sizeA )
54- h5write(filename , varname , A , start , count= sizeA )
55- elseif all(diskshape == fliplr(sizeA ))
56- h5write(filename , varname , A .' , start , count= fliplr(sizeA ))
57- else
58- error(' hdf5nc:h5save:value_error' , [' shape of ' ,varname ,' : ' , int2str(sizeA ), ' does not match existing HDF5 shape ' , int2str(diskshape )])
59- end
60-
61- end % function
62-
63-
64- function new_file(filename , varname , A , sizeA )
65-
66-
67- folder = fileparts(filename );
68- if strlength(folder ) > 0 && ~isfolder(folder )
69- error(' hdf5nc:h5save:fileNotFound' , ' %s is not a folder, cannot create %s ' , folder , filename )
70- end
71-
72- if isempty(sizeA )
73- if isscalar(A )
74- h5_write_scalar(filename , varname , A )
75- return
76- elseif isvector(A )
77- h5create(filename , varname , length(A ), Datatype= class(A ))
26+ try
27+ if h5exists(filename , varname )
28+ h5_exist_file(filename , varname , A , opts .size )
7829 else
79- create_compress (filename , varname , A , size( A ) )
30+ h5_new_file (filename , varname , A , opts . size )
8031 end
81- else
82- if isscalar(sizeA )
83- if sizeA == 0
84- h5_write_scalar(filename , varname , A )
85- return
86- else
87- h5create(filename , varname , sizeA , Datatype= class(A ))
88- end
32+ catch e
33+ if e .identifier == " MATLAB:imagesci:hdf5io:resourceNotFound"
34+ h5_new_file(filename , varname , A , opts .size )
8935 else
90- create_compress( filename , varname , A , sizeA )
36+ rethrow( e )
9137 end
9238end
9339
94- h5write(filename , varname , A )
95-
9640end % function
9741
98-
9942% Copyright 2020 Michael Hirsch
10043
10144% Licensed under the Apache License, Version 2.0 (the "License");
0 commit comments