Hi Sebastian, I've tried your macro and it works fine with the latest version of ROOT. Notice however, that there are some problems in your macro, most notably you don't initialize myfile=0 and some "un-natural" usage of TStrings. See corrected macro below. Also notice that to quickly find out if a file exists you just can call TSystem::AccessPathName(). Cheers, Fons. #include <iostream> #include "TSystem.h" #include "TString.h" #include "TROOT.h" #include "TFile.h" TFile* FindFile(TString filename, TString pathname) { TString workingdir = gSystem->WorkingDirectory() ; gSystem->ChangeDirectory(pathname); cout << "I am in the directory : " << gSystem->WorkingDirectory() << endl; cout << "Searching file " << filename << " .... " << endl; void *dirp = gSystem->OpenDirectory("."); TFile *myfile = 0; const char *afile; while ((afile = gSystem->GetDirEntry(dirp))) { cout << "afile : " << afile << endl; if (filename == afile){ myfile = new TFile(afile,"RECREATE","",1); cout << "File : " << filename << " has been found in "<< pathname << endl; } } if (myfile == 0) cout << "No file " << filename << " has been found in " << pathname << endl; gSystem->FreeDirectory(dirp); gSystem->ChangeDirectory(workingdir); return myfile ; } On Wed, 2002-04-10 at 19:42, Sebastien Greder wrote: > Hi Philippe, > > thanks to reply so quickly (it's the first time I use this mailing list !) > > The version I use is : 3.02.07 on Linux with g++. > > To be clear, I give you a small code which give rise to the same problem: > > compil.C : > > { > gROOT->Reset(); > > // Get your Working directory > > TString pwd = gSystem->pwd(); > gSystem->Load("/cern/2001/root.3.02.07/lib/libPhysics.so"); > gSystem->Load("/cern/2001/root.3.02.07/lib/libCore.so"); > > // Process some utilities methods > > gROOT->ProcessLine(".L /home/sgreder/root/utilities/FindFile.C+"); > } > > and FindFile.C : > > #include <iostream> > #include "TSystem.h" > #include "TString.h" > #include "TROOT.h" > #include "TFile.h" > > TFile* FindFile(TString filename, TString pathname) > { > TString workingdir = gSystem->WorkingDirectory() ; > gSystem->ChangeDirectory(pathname); > cout << "I am in the directory : " << gSystem->WorkingDirectory() << > endl; > cout << "Searching file " << filename.Data() << " .... " << endl; > void *dirp = gSystem->OpenDirectory("."); > > TFile *myfile ; > const char *afile; > while(afile = gSystem->GetDirEntry(dirp)) { > cout << "afile : " << afile << endl; > if (strcmp(afile,filename.Data()) == 0){ > myfile = new TFile(afile,"RECREATE","",1); > > cout << "File : " << filename.Data() << " has been found in "<< > pathname.Data() << endl; > } > } > if(myfile == 0) cout << "No file " << filename.Data() << " has been > found in " << pathname.Data() << endl; > gSystem->FreeDirectory(dirp); > gSystem->ChangeDirectory(workingdir); > return myfile ; > } > > and then I run : .x compil.C in ROOT > > and I get the following error message : > > Info in <ACLiC>: creating shared library > /home/sgreder/root/utilities/FindFile_C.so > /home/sgreder/root/utilities/FindFile.C: In function `class TFile * > FindFile(class TString, class TString)': > In file included from /home/sgreder/root/utilities/filetjO4PP.h:29, > from /home/sgreder/root/utilities/filetjO4PP.C:5: > /home/sgreder/root/utilities/FindFile.C:17: warning: suggest parentheses > around assignment used as truth value > dlopen error: /home/sgreder/root/utilities/FindFile_C.so: undefined > symbol: __5TFilePCcPCcT1i > Load Error: Failed to load Dynamic link library > /home/sgreder/root/utilities/FindFile_C.so > /home/sgreder/root/utilities/FindFile.C: In function `class TFile * > FindFile(class TString, class TString)': > In file included from /home/sgreder/root/utilities/filetjO4PP.h:29, > from /home/sgreder/root/utilities/filetjO4PP.C:5: > /home/sgreder/root/utilities/FindFile.C:17: warning: suggest parentheses > around assignment used as truth value > /usr/lib/crt1.o(.text+0x18): undefined reference to `main' > /home/sgreder/root/utilities/filetjO4PP.o: In function > `G__Sizep2memfuncfiletjO4PP::G__Sizep2memfuncfiletjO4PP(void)': > /home/sgreder/root/utilities/filetjO4PP.C(.text+0x212): undefined > reference to `TFile::TFile(char const *, char const *, char const *, int)' > collect2: ld returned 1 exit status > !!!Dictionary position not recorvered because G__unloadfile() in macro!!! > *** Interpreter error recovered *** > > *** Break *** segmentation violation > > Cheers, > seb. -- Org: CERN, European Laboratory for Particle Physics. Mail: 1211 Geneve 23, Switzerland E-Mail: Fons.Rademakers@cern.ch Phone: +41 22 7679248 WWW: http://root.cern.ch/~rdm/ Fax: +41 22 7679480
This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:48 MET