Re: Deleting objects in a TFile

From: Rene Brun (Rene.Brun@cern.ch)
Date: Wed Feb 02 2000 - 19:39:24 MET


Hi Glenn,
If you want to rewrite the same object, with the same key, do:
v.Write("vector",TObject::kOverwrite);

If you use f.Delete("*;*"), the space that you free can only be reused
when you reopen the file again. This is to guarantee directory
consistency. 

Rene Brun

On Wed, 2 Feb 2000, Glen R. Salo wrote:

> Is there a way to delete objects from a TFile and free up the disk memory?  The
> example given below illustrates the problem - even though I delete the TVector
> object, the size of the file does not decrease, and if I write the TVector to
> the file again, the file grows in size.
> 
> Thanks for your help,
> 
> Glen
> 
> root [0] TFile f("test.root","RECREATE");
> root [1] f.ls();
> TFile**         test.root       
>  TFile*         test.root       
> root [2] .!ls -l test.root
> -rw-r--r--   1 gsalo    gsalo         148 Feb  2 12:30 test.root
> root [3] TVector v(1000);
> root [4] v.Write("vector");
> root [5] f.ls();
> TFile**         test.root       
>  TFile*         test.root       
>   KEY: TVector  vector;1        Vector class
> root [6] .!ls -l test.root
> -rw-r--r--   1 gsalo    gsalo         250 Feb  2 12:30 test.root
> root [7] f.Delete("*;*");
> root [8] f.ls();
> TFile**         test.root       
>  TFile*         test.root       
> root [9] .!ls -l test.root
> -rw-r--r--   1 gsalo    gsalo         252 Feb  2 12:30 test.root
> root [10] v.Write("vector");
> root [11] f.ls();           
> TFile**         test.root       
>  TFile*         test.root       
>   KEY: TVector  vector;1        Vector class
> root [12] .!ls -l test.root 
> -rw-r--r--   1 gsalo    gsalo         350 Feb  2 12:31 test.root
> 



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:18 MET