Logo ROOT  
Reference Guide
No Matches
copyFiles.C File Reference

Detailed Description

View in nbviewer Open in SWAN Example of script showing how to copy all objects (including directories) from a source file.

For each input file, a new directory is created in the current directory with the name of the source file. After the execution of:

root [0] .x copyFiles.C

the file result.root will contain 4 subdirectories: "tot100.root", "hsimple.root", "hs1.root","hs2.root"

#include "TROOT.h"
#include "TKey.h"
#include "TFile.h"
#include "TSystem.h"
#include "TTree.h"
void CopyDir(TDirectory *source) {
//copy all objects and subdirs of directory source as a subdir of the current directory
TDirectory *adir = savdir->mkdir(source->GetName());
//loop on all entries of this directory
TKey *key;
//Loop in reverse order to make sure that the order of cycles is
TIter nextkey(source->GetListOfKeys(),kIterBackward);
while ((key = (TKey*)nextkey())) {
const char *classname = key->GetClassName();
TClass *cl = gROOT->GetClass(classname);
if (!cl) continue;
if (cl->InheritsFrom(TDirectory::Class())) {
} else if (cl->InheritsFrom(TTree::Class())) {
TTree *T = (TTree*)source->Get(key->GetName());
// Avoid writing the data of a TTree more than once.
// Note this assume that older cycles are (as expected) older
// snapshots of the TTree meta data.
if (!adir->FindObject(key->GetName())) {
TTree *newT = T->CloneTree(-1,"fast");
} else {
TObject *obj = key->ReadObj();
delete obj;
void CopyFile(const char *fname) {
//Copy all objects and subdirs of file fname as a subdir of the current directory
TFile *f = TFile::Open(fname);
if (!f || f->IsZombie()) {
printf("Cannot copy file: %s\n",fname);
delete f;
void copyFiles() {
//prepare files to be copied
if(gSystem->AccessPathName("tot100.root")) {
gSystem->CopyFile("hsimple.root", "tot100.root");
gSystem->CopyFile("hsimple.root", "hs1.root");
gSystem->CopyFile("hsimple.root", "hs2.root");
//main function copying 4 files as subdirectories of a new file
TFile *f = new TFile("result.root","recreate");
delete f;
#define f(i)
Definition RSha256.hxx:104
const Bool_t kTRUE
Definition RtypesCore.h:91
const Bool_t kIterBackward
Definition TCollection.h:41
#define gDirectory
Definition TDirectory.h:290
#define gROOT
Definition TROOT.h:406
R__EXTERN TSystem * gSystem
Definition TSystem.h:559
TClass instances represent classes, structs and namespaces in the ROOT type system.
Definition TClass.h:80
Bool_t InheritsFrom(const char *cl) const
Return kTRUE if this class inherits from a class with name "classname".
Definition TClass.cxx:4851
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name.
Definition TClass.cxx:2957
Describe directory structure in memory.
Definition TDirectory.h:45
virtual TObject * Get(const char *namecycle)
Return pointer to object identified by namecycle.
void ls(Option_t *option="") const override
List Directory contents.
TObject * FindObject(const char *name) const override
Find object by name in the list of memory objects.
virtual void SaveSelf(Bool_t=kFALSE)
Definition TDirectory.h:208
virtual TDirectory * mkdir(const char *name, const char *title="", Bool_t returnExistingDirectory=kFALSE)
Create a sub-directory "a" or a hierarchy of sub-directories "a/b/c/...".
virtual TList * GetListOfKeys() const
Definition TDirectory.h:177
virtual Bool_t cd(const char *path=nullptr)
Change current directory to "this" directory.
A ROOT file is a suite of consecutive data records (TKey instances) with a well defined format.
Definition TFile.h:54
static TFile * Open(const char *name, Option_t *option="", const char *ftitle="", Int_t compress=ROOT::RCompressionSetting::EDefaults::kUseCompiledDefault, Int_t netopt=0)
Create / open a file.
Definition TFile.cxx:3997
Book space in a file, create I/O buffers, to fill them, (un)compress them.
Definition TKey.h:28
virtual const char * GetClassName() const
Definition TKey.h:76
virtual TObject * ReadObj()
To read a TObject* from the file.
Definition TKey.cxx:750
virtual const char * GetName() const
Returns name of object.
Definition TNamed.h:47
Mother of all ROOT objects.
Definition TObject.h:37
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Definition TObject.cxx:798
virtual int CopyFile(const char *from, const char *to, Bool_t overwrite=kFALSE)
Copy a file.
Definition TSystem.cxx:1339
virtual Bool_t AccessPathName(const char *path, EAccessMode mode=kFileExists)
Returns FALSE if one can access a file using the specified access mode.
Definition TSystem.cxx:1294
A TTree represents a columnar dataset.
Definition TTree.h:79
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory.
Definition TTree.cxx:9686
Rene Brun

Definition in file copyFiles.C.