Hello, I'm having trouble copying an object to an exterally-linked hdf5 file.I 
can copy an object within the same file using H5Ocopy(file_id, "/G4", file_id, 
"/G1/G4", H5P_DEFAULT, H5P_DEFAULT)I can create external links using 
H5Lcreate_external("file2.h5", "G2", file_id, "G2", H5P_DEFAULT, H5P_DEFAULT)I 
can even create a group in the externally-linked file using H5Gcreate(file_id, 
"/G2/G3", H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT)But I cannot copy to the 
externally-linked file, as H5Ocopy(file_id, "/G4", file_id, "/G2/G3/G4", 
H5P_DEFAULT, H5P_DEFAULT) gives me an error. I'm wondering what I'm doing 
wrong? Or is my version of hdf5 simply out of date?
 (Sample code attached) Chris.
                                          
#include "hdf5.h"

/*   Create the following
HDF5 "file2.h5" {
GROUP "/" {
   GROUP "G2" {
   }
}
}
*/
void createfile2() {
   herr_t status;
   
   hid_t file_id = H5Fcreate("file2.h5", H5F_ACC_TRUNC, H5P_DEFAULT, 
H5P_DEFAULT);
   hid_t group2_id = H5Gcreate(file_id, "G2", H5P_DEFAULT, H5P_DEFAULT, 
H5P_DEFAULT);
   status = H5Gclose(group2_id);
   if (status) puts("Error 1");
   status = H5Fclose(file_id);
   if (status) puts("Error 2");
}


/*   Given a file_id, initialize the following
HDF5 "file1.h5" {
GROUP "/" {
   GROUP "G1" {
   }
   GROUP "G4" {
      GROUP "G5" {
      }
   }
}
}
*/
void initialize(hid_t file_id) {
   herr_t status;

   hid_t group1_id = H5Gcreate(file_id, "G1", H5P_DEFAULT, H5P_DEFAULT, 
H5P_DEFAULT);
   status = H5Gclose(group1_id);
   if (status) puts("Error 3");
   
   hid_t group4_id = H5Gcreate(file_id, "G4", H5P_DEFAULT, H5P_DEFAULT, 
H5P_DEFAULT);
   hid_t group5_id = H5Gcreate(file_id, "G4/G5", H5P_DEFAULT, H5P_DEFAULT, 
H5P_DEFAULT);
   status = H5Gclose(group5_id);
   if (status) puts("Error 4");
   status = H5Gclose(group4_id);
   if (status) puts("Error 5");
}

int main(int argc, char*argv[]) {
   herr_t status;
   
   createfile2();

   /*    Open and initialize file1 */
   hid_t file_id = H5Fcreate("file1.h5", H5F_ACC_TRUNC, H5P_DEFAULT, 
H5P_DEFAULT);   
   initialize(file_id);
   
   /* I can copy an object within the same file */
   status = H5Ocopy(file_id, "/G4", file_id, "/G1/G4", H5P_DEFAULT, 
H5P_DEFAULT);
   if (status) puts("Error 6");

   /* I can create external links */
   status = H5Lcreate_external("file2.h5", "G2", file_id, "G2", H5P_DEFAULT, 
H5P_DEFAULT);
   if (status) puts("Error 7");
   
   /* I can create a group in the externally-linked file */
   hid_t group3_id = H5Gcreate(file_id, "/G2/G3", H5P_DEFAULT, H5P_DEFAULT, 
H5P_DEFAULT);
   status = H5Gclose(group3_id);
   if (status) puts("Error 8");
   
   /* I cannot copy to the externally-linked file */
   status = H5Ocopy(file_id, "/G4", file_id, "/G2/G3/G4", H5P_DEFAULT, 
H5P_DEFAULT);
   if (status) puts("Error 9");

   /*    Close file1 */
   status = H5Fclose(file_id);
   if (status) puts("Error 10");

   /* */
   return 0; 
}
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5

Reply via email to