This is the correct behaviour. The statement test.pwd() prints
the name of the directory pointed by test.
What you can do is teh following:
test.cd("dir1l1");
gDirectory->pwd(); //the global gDirectory points to the current dir
TDirectory *dir1l1 = gDirectory;
dir1l1->pwd(); //same as above
> New files are created in the right directory, but how is one to keep track
> where in the directory tree one is at a given moment?
>
> root [18] test.mkdir("dir1l2")
> (class TDirectory*)0xa0e998
> root [19] test.ls()
> TFile** test.root
> TFile* test.root
> TDirectory* dir1l1 dir1l1
> TDirectory* dir1l2 dir1l2
>
> Further, it is possible to create "invalid" directory names... in the
> following
> if ROOT is to mimic the directory behaviour of an OS file system the
> command;
>
> root [21] test.mkdir("dir2l2/dir1l3")
>
> would be expected to create directory "dir2l2" and "under" it a subdirectory
> "dir1l3" but the result is;
>
> (class TDirectory*)0xa0fa18
> root [22] test.ls()
> TFile** test.root
> TFile* test.root
> TDirectory* dir1l1 dir1l1
> TDirectory* dir1l2 dir1l2
> TDirectory* dir2l2/dir1l3 dir2l2/dir1l3
>
> and since the "/" is a directory seperator, all other operations fail unless
> the "/" is escaped:
>
> root [23] test.cd("dir2l2/dir1l3")
> Error in <TFile::cd>: Unknown directory dir2l2
> root [24] test.Delete("dir2l2\/dir1l3")
Root version 2.00/03 cannot create both dir2l2 and dir1l3 in the
same call. You need :
test.cd();
test.mkdir("dir2l2");
test.cd("dir2l2");
TDirectory *dir2l2 = gDirectory;
dir2l2->mkdir("dir1l3"); //etc..
I have protected mkdir against slashes in my current version.
In Root version 2.00/03, there is no way to delete one single directory.
I have implemented this possibility in my current version (2.00/04).
Rene Brun