Re: [ROOT] Questions regarding TDirectory

From: cstrato@EUnet.at
Date: Sun Jan 06 2002 - 18:14:55 MET


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
>



This archive was generated by hypermail 2b29 : Sat Jan 04 2003 - 23:50:37 MET