Re: [ROOT] Questions regarding TDirectory

From: Fons Rademakers (Fons.Rademakers@cern.ch)
Date: Mon Jan 07 2002 - 01:02:40 MET


It is a static method, call it like "TDirectory::DecodeNameCycle(...)".

-- Fons.


On Sunday 06 January 2002 18:14, cstrato@EUnet.at wrote:
> Dear Rene
>
> Thank you for your comments.
>
> BTW, regarding DecodeNameCycle I realized too late that I can
> always call "gDirectory->DecodeNameCycle(..)" to get name and cycle.
>
> Best regards
> Christian
>
> Rene Brun wrote:
> > Hi Christian,
> >
> > On Sun, 6 Jan 2002, cstrato@EUnet.at wrote:
> > > Dear Rene
> > >
> > > Thank you for the fast reply and especially for the implementation
> > > of TDirectory::FindObjectAny().
> > >
> > > Please let me comment to your answers of my questions to see if my
> > > code has some flaws:
> > >
> > > 1, Constructor: As far as I understand "gDirectory->FindObject(name)"
> > > does only find an object if it is already in memory. So in order to
> > > check if a directory exists in a TFile stored on disk, I did:
> > > "key = fDir->GetKey(obj->GetName());"
> > > If (key != 0) then the directory does exist. Is this correct?
> >
> > Correct
> >
> > > 2, RecursiveRemove: What I wanted to do is "fDir->Delete(obj)" in
> > > order to delete an object permanently from TFile on disk.
> > > I am not sure if "fDir->Delete(obj-GetName())" does delete the object
> > > permanently, since "obj-GetName()" does not return the namecycle,
> > > since the object is in memory?
> > > How can I delete an object permanently from a TFile on disk, when
> > > the object is loaded into memory already?
> >
> > Use TDirectory::Delete. Chhose one of the following options depending
> > what you want do do:
> >
> > void TDirectory::Delete(const char *namecycle)
> > //   namecycle has the format name;cycle
> > //   namecycle = "" same as namecycle ="T*"
> > //   name  = * means all
> > //   cycle = * means all cycles (memory and keys)
> > //   cycle = "" or cycle = 9999 ==> apply to a memory object
> > //   When name=* use T* to delete subdirectories also
> > //
> > //   To delete one directory, you must specify the directory cycle,
> > //      eg.  file.Delete("dir1;1");
> > //
> > //   examples:
> > //     foo   : delete object named foo in memory
> > //     foo*  : delete all objects with a name starting with foo
> > //     foo;1 : delete cycle 1 of foo on file
> > //     foo;* : delete all cycles of foo on file and also from memory
> > //     *;2   : delete all objects on file having the cycle 2
> > //     *;*   : delete all objects from memory and file
> > //    T*;*   : delete all objects from memory and file and all
> > subdirectories
> >
> > > 5, EncodeNameCycle: I need to get "key = fDir->GetKey(name,cycle);",
> > > so I have written my own function to extract name and cycle, but I
> > > thought it would be easier if TObject would already contain this
> > > possibility.
> >
> > With the new functions FindKey and FindKeyAny, you do not need to call
> > EncodeNameCycle. You can do directly, eg:
> >    mydir->FindKey("blabla;1");
> >
> > Rene Brun

-- 
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:37 MET