diff src/ls-hdf5.h @ 6760:301885c9d265

[project @ 2007-06-27 02:27:51 by dbateman]
author dbateman
date Wed, 27 Jun 2007 02:27:51 +0000
parents 768d3ad80bbf
children 93c65f2a5668
line wrap: on
line diff
--- a/src/ls-hdf5.h	Tue Jun 26 15:54:41 2007 +0000
+++ b/src/ls-hdf5.h	Wed Jun 27 02:27:51 2007 +0000
@@ -44,13 +44,20 @@
 
   hdf5_fstreambase () { file_id = -1; }
 
+  ~hdf5_fstreambase () { close (); }
+
   hdf5_fstreambase (const char *name, int mode, int /* prot */ = 0)
     {
       if (mode & std::ios::in)
 	file_id = H5Fopen (name, H5F_ACC_RDONLY, H5P_DEFAULT);
       else if (mode & std::ios::out)
-	file_id = H5Fcreate (name, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
+	{
+	  if (mode & std::ios::app && H5Fis_hdf5 (name) > 0)
+	    file_id = H5Fopen (name, H5F_ACC_RDWR, H5P_DEFAULT);
+	  else
+	    file_id = H5Fcreate (name, H5F_ACC_TRUNC, H5P_DEFAULT, 
+				 H5P_DEFAULT);
+	}
       if (file_id < 0)
 	std::ios::setstate (std::ios::badbit);
 
@@ -74,8 +81,13 @@
       if (mode & std::ios::in)
 	file_id = H5Fopen (name, H5F_ACC_RDONLY, H5P_DEFAULT);
       else if (mode & std::ios::out)
-	file_id = H5Fcreate (name, H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
-
+	{
+	  if (mode & std::ios::app && H5Fis_hdf5 (name) > 0)
+	    file_id = H5Fopen (name, H5F_ACC_RDWR, H5P_DEFAULT);
+	  else
+	    file_id = H5Fcreate (name, H5F_ACC_TRUNC, H5P_DEFAULT, 
+				 H5P_DEFAULT);
+	}
       if (file_id < 0)
 	std::ios::setstate (std::ios::badbit);