library: libCore #include "TFile.h"

# TFile

class description - source file - inheritance tree (.pdf)

## class TFile : public TDirectory

| Inheritance Chart:
`TObject`
| <- | `TNamed`
| <- | `TDirectory`
| <- | `TFile` |
<- |
`TDCacheFile` |
`TNetFile` | <- |
`TCastorFile` |
`TXNetFile` |
`TRFIOFile` |
`TWebFile` |
`TXMLFile` |

        private:

                TFile(const TFile&)
           void operator=(const TFile&)

        protected:

                  Long64_t GetRelOffset() const
                      void Init(Bool_t create)
                     Int_t ReadBufferViaCache(char* buf, Int_t len)
             virtual Int_t SysClose(Int_t fd)
             virtual Int_t SysOpen(const char* pathname, Int_t flags, UInt_t mode)
             virtual Int_t SysRead(Int_t fd, void* buf, Int_t len)
          virtual Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence)
             virtual Int_t SysStat(Int_t fd, Long_t* id, Long64_t* size, Long_t* flags, Long_t* modtime)
             virtual Int_t SysSync(Int_t fd)
             virtual Int_t SysWrite(Int_t fd, const void* buf, Int_t len)
                     Int_t WriteBufferViaCache(const char* buf, Int_t len)

        public:

                            TFile()
                            TFile(const char* fname, Option_t* option = "", const char* ftitle = "", Int_t compress = 1)
                    virtual ~TFile()
             static TClass* Class()
               virtual void Close(Option_t* option = "")
               virtual void Copy(TObject&) const
               virtual void Delete(const char* namecycle = "")
               virtual void Draw(Option_t* option = "")
               virtual void DrawMap(const char* keys = "*", Option_t* option = "")
               virtual void FillBuffer(char*& buffer)
               virtual void Flush()
              TArchiveFile* GetArchive() const
                      Int_t GetBestBuffer() const
           virtual Long64_t GetBytesRead() const
           virtual Long64_t GetBytesWritten() const
                   TArrayC* GetClassIndex() const
                    Float_t GetCompressionFactor()
                      Int_t GetCompressionLevel() const
           virtual Long64_t GetEND() const
              virtual Int_t GetErrno() const
                      Int_t GetFd() const
            static Long64_t GetFileBytesRead()
            static Long64_t GetFileBytesWritten()
                     TList* GetListOfFree() const
                 TObjArray* GetListOfProcessIDs() const
              virtual Int_t GetNbytesFree() const
              virtual Int_t GetNbytesInfo() const
              virtual Int_t GetNfree() const
              virtual Int_t GetNProcessIDs() const
          virtual Option_t* GetOption() const
                      Int_t GetRecordHeader(char* buf, Long64_t first, Int_t maxbytes, Int_t& nbytes, Int_t& objlen, Int_t& keylen)
           virtual Long64_t GetSeekFree() const
           virtual Long64_t GetSeekInfo() const
           virtual Long64_t GetSize() const
             virtual TList* GetStreamerInfoList()
                      Int_t GetVersion() const
               virtual void IncrementProcessIDs()
            virtual TClass* IsA() const
             virtual Bool_t IsArchive() const
             virtual Bool_t IsOpen() const
               virtual void ls(Option_t* option = "") const
               virtual void MakeFree(Long64_t first, Long64_t last)
               virtual void MakeProject(const char* dirname, const char* classes = "*", Option_t* option = "new")
               virtual void Map()
              static TFile* Open(const char* name, Option_t* option = "", const char* ftitle = "", Int_t compress = 1, Int_t netopt = 0)
               virtual void Paint(Option_t* option = "")
               virtual void Print(Option_t* option = "") const
             virtual Bool_t ReadBuffer(char* buf, Int_t len)
               virtual void ReadFree()
               virtual void ReadStreamerInfo()
              virtual Int_t Recover()
              virtual Int_t ReOpen(Option_t* mode)
               virtual void ResetErrno() const
               virtual void Seek(Long64_t offset, TFile::ERelativeTo pos = kBeg)
               virtual void SetCompressionLevel(Int_t level = 1)
               virtual void SetEND(Long64_t last)
                static void SetFileBytesRead(Long64_t bytes = 0)
                static void SetFileBytesWritten(Long64_t bytes = 0)
               virtual void SetOption(Option_t* option = ">")
               virtual void ShowMembers(TMemberInspector& insp, char* parent)
               virtual void ShowStreamerInfo()
              virtual Int_t Sizeof() const
               virtual void Streamer(TBuffer& b)
                       void StreamerNVirtual(TBuffer& b)
                       void SumBuffer(Int_t bufsize)
               virtual void UseCache(Int_t maxCacheSize = 10, Int_t pageSize = TCache::kDfltPageSize)
              virtual Int_t Write(const char* name = "0", Int_t opt = 0, Int_t bufsiz = 0)
              virtual Int_t Write(const char* name = "0", Int_t opt = 0, Int_t bufsiz = 0) const
             virtual Bool_t WriteBuffer(const char* buf, Int_t len)
               virtual void WriteFree()
               virtual void WriteHeader()
               virtual void WriteStreamerInfo()

### Data Members

        protected:

                 Double_t fSumBuffer      Sum of buffer sizes of objects written so far
                 Double_t fSum2Buffer     Sum of squares of buffer sizes of objects written so far
                 Long64_t fBytesWrite     Number of bytes written to this file
                 Long64_t fBytesRead      Number of bytes read from this file
                 Long64_t fBEGIN          First used byte in file
                 Long64_t fEND            Last used byte in file
                 Long64_t fSeekFree       Location on disk of free segments structure
                 Long64_t fSeekInfo       Location on disk of StreamerInfo record
                    Int_t fD              File descriptor
                    Int_t fVersion        File format version
                    Int_t fCompress       Compression level from 0(not compressed) to 9 (max compression)
                    Int_t fNbytesFree     Number of bytes for free segments structure
                    Int_t fNbytesInfo     Number of bytes for StreamerInfo record
                    Int_t fWritten        Number of objects written so far
                    Int_t fNProcessIDs    Number of TProcessID written to this file
                  TString fRealName       Effective real file name (not original url)
                  TString fOption         File options
                   Char_t fUnits          Number of bytes for file pointers
                   TList* fFree           Free segments linked list table
                 TArrayC* fClassIndex     !Index of TStreamerInfo classes written to this file
                  TCache* fCache          !Page cache used to reduce number of small I/O's
               TObjArray* fProcessIDs     !Array of pointers to TProcessIDs
                 Long64_t fOffset         !Seek offset used by remote file classes
            TArchiveFile* fArchive        !Archive file from which we read this file
                 Long64_t fArchiveOffset  !Offset at which file starts in archive
                   Bool_t fIsArchive      !True if this is a pure archive file
                   Bool_t fIsRootFile     !True is this is a ROOT file
          static Long64_t fgBytesWrite    Number of bytes written by all TFile objects
          static Long64_t fgBytesRead     Number of bytes read by all TFile objects

        public:

          static const TFile::EStatusBits kRecovered
          static const TFile::EStatusBits kHasReferences
          static const TFile::EStatusBits kDevNull
          static const TFile::EStatusBits kWriteError
          static const TFile::ERelativeTo kBeg
          static const TFile::ERelativeTo kCur
          static const TFile::ERelativeTo kEnd
                static const enum TFile:: kStartBigFile

## Class Description

TFile() : TDirectory()

     File default Constructor.

TFile(const char *fname1, Option_t *option, const char *ftitle, Int_t compress) : TDirectory()

     Opens or creates a local ROOT file whose name is fname1. It is
     recommended to specify fname1 as "<file>.root". The suffix ".root"
     will be used by object browsers to automatically identify the file as
     a ROOT file. If the constructor fails in any way IsZombie() will
     return true. Use IsOpen() to check if the file is (still) open.

     To open non-local files use the static TFile::Open() method, that
     will take care of opening the files using the correct remote file
     access plugin.

     If option = NEW or CREATE   create a new file and open it for writing,
                                 if the file already exists the file is
                                 not opened.
               = RECREATE        create a new file, if the file already
                                 exists it will be overwritten.
               = UPDATE          open an existing file for writing.
                                 if no file exists, it is created.
               = READ            open an existing file for reading.
               = NET             used by derived remote file access
                                 classes, not a user callable option
               = WEB             used by derived remote http access
                                 class, not a user callable option

     The file can be specified as a URL of the form:
        file:///user/rdm/bla.root or file:/user/rdm/bla.root

     The file can also be a member of an archive, in which case it is
     specified as:
        multi.zip#file.root or multi.zip#0
     which will open file.root which is a member of the file multi.zip
     archive or member 1 from the archive. For more on archive file
     support see the TArchiveFile class.

     TFile and its remote access plugins can also be used to open any
     file, i.e. also non ROOT files, using:
        file.tar?filetype=raw
     This is convenient because the many remote file access plugins allow
     easy access to/from the many different mass storage systems.

     The title of the file (ftitle) will be shown by the ROOT browsers.

     A ROOT file (like a Unix file system) may contain objects and
     directories. There are no restrictions for the number of levels
     of directories.

     A ROOT file is designed such that one can write in the file in pure
     sequential mode (case of BATCH jobs). In this case, the file may be
     read sequentially again without using the file index written
     at the end of the file. In case of a job crash, all the information
     on the file is therefore protected.

     A ROOT file can be used interactively. In this case, one has the
     possibility to delete existing objects and add new ones.
     When an object is deleted from the file, the freed space is added
     into the FREE linked list (fFree). The FREE list consists of a chain
     of consecutive free segments on the file. At the same time, the first
     4 bytes of the freed record on the file are overwritten by GAPSIZE
     where GAPSIZE = -(Number of bytes occupied by the record).

     Option compress is used to specify the compression level:
      compress = 0 objects written to this file will not be compressed.
      compress = 1 minimal compression level but fast.
      ....
      compress = 9 maximal compression level but slow.

     Note that the compression level may be changed at any time.
     The new compression level will only apply to newly written objects.
     The function TFile::Map() shows the compression factor
     for each object written to this file.
     The function TFile::GetCompressionFactor returns the global
     compression factor for this file.

     In case the file does not exist or is not a valid ROOT file,
     it is made a Zombie. One can detect this situation with a code like:
        TFile f("file.root");
        if (f.IsZombie()) {
           cout << "Error opening file" << endl;
           exit(-1);
        }

     A ROOT file is a suite of consecutive data records (TKey's) with
     the following format (see also the TKey class). If the key is
     located past the 32 bit file limit (> 2 GB) then some fields will
     be 8 instead of 4 bytes:
        1->4            Nbytes    = Length of compressed object (in bytes)
        5->6            Version   = TKey version identifier
        7->10           ObjLen    = Length of uncompressed object
        11->14          Datime    = Date and time when object was written to file
        15->16          KeyLen    = Length of the key structure (in bytes)
        17->18          Cycle     = Cycle of key
        19->22 [19->26] SeekKey   = Pointer to record itself (consistency check)
        23->26 [27->34] SeekPdir  = Pointer to directory header
        27->27 [35->35] lname     = Number of bytes in the class name
        28->.. [36->..] ClassName = Object Class Name
        ..->..          lname     = Number of bytes in the object name
        ..->..          Name      = lName bytes with the name of the object
        ..->..          lTitle    = Number of bytes in the object title
        ..->..          Title     = Title of the object
        ----->          DATA      = Data bytes associated to the object

     The first data record starts at byte fBEGIN (currently set to kBEGIN).
     Bytes 1->kBEGIN contain the file description, when fVersion >= 1000000
     it is a large file (> 2 GB) and the offsets will be 8 bytes long and
     fUnits will be set to 8:
        1->4            "root"      = Root file identifier
        5->8            fVersion    = File format version
        9->12           fBEGIN      = Pointer to first data record
        13->16 [13->20] fEND        = Pointer to first free word at the EOF
        17->20 [21->28] fSeekFree   = Pointer to FREE data record
        21->24 [29->32] fNbytesFree = Number of bytes in FREE data record
        25->28 [33->36] nfree       = Number of free data records
        29->32 [37->40] fNbytesName = Number of bytes in TNamed at creation time
        33->33 [41->41] fUnits      = Number of bytes for file pointers
        34->37 [42->45] fCompress   = Zip compression level
        38->41 [46->53] fSeekInfo   = Pointer to TStreamerInfo record
        42->45 [54->57] fNbytesInfo = Number of bytes in TStreamerInfo record
        46->63 [58->75] fUUID       = Universal Unique ID

/* */

     The structure of a directory is shown in TDirectory::TDirectory

TFile(const TFile &file) : TDirectory()

~TFile()

     File destructor.

void Init(Bool_t create)

     Initialize a TFile object.

void Close(Option_t *option)

    *-*-*-*-*-*-*-*-*-*-*-*Close a file*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                    ============
     if option == "R", all TProcessIDs referenced by this file are deleted.
     Calling TFile::Close("R") might be necessary in case one reads a long list
     of files having TRef, writing some of the referenced objects or TRef
     to a new file. If the TRef or referenced objects of the file being closed
     will not be referenced again, it is possible to minimize the size
     of the TProcessID data structures in memory by forcing a delete of
     the unused TProcessID.

void Delete(const char *namecycle)

    *-*-*-*-*-*-*-*-*-*-*-*-*Delete object namecycle*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                      =======================
      namecycle identifies an object in the top directory of the file
       namecycle has the format name;cycle
       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

       examples:
         foo   : delete object named foo in memory
         foo;1 : delete cycle 1 of foo on file
         foo;* : delete all cycles of foo on disk 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

void Draw(Option_t *option)

    *-*-*-*-*-*-*-*-*-*-*-*Fill Graphics Structure and Paint-*-*-*-*-*-*-*-*-*-*
    *-*                    =================================
     Loop on all objects (memory or file) and all subdirectories

void DrawMap(const char *keys, Option_t *option)

     Draw map of objects in this file

void Flush()

     Synchronize a file's in-core and on-disk states.

void FillBuffer(char *&buffer)

    *-*-*-*-*-*-*-*-*-*-*-*Encode file output buffer*-*-*-*-*-*-*
    *-*                    =========================
     The file output buffer contains only the FREE data record

Int_t GetBestBuffer() const

    *-*-*-*-*-*-*-*Return the best buffer size of objects on this file*-*-*-*-*-*
    *-*            ===================================================

      The best buffer size is estimated based on the current mean value
      and standard deviation of all objects written so far to this file.
      Returns mean value + one standard deviation.

Float_t GetCompressionFactor()

    *-*-*-*-*-*-*-*-*-*Return the file compression factor*-*-*-*-*-*-*-*-*-*
    *-*                =================================

      Add total number of compressed/uncompressed bytes for each key.
      return ratio of the two.

Int_t GetErrno() const

     Method returning errno. Is overriden in TRFIOFile.

void ResetErrno() const

     Method resetting the errno. Is overridden in TRFIOFile.

Int_t GetRecordHeader(char *buf, Long64_t first, Int_t maxbytes, Int_t &nbytes, Int_t &objlen, Int_t &keylen)

    *-*-*-*-*-*-*-*-*Read the logical record header starting at position first
    *-*              =========================================================
     maxbytes bytes are read into buf
     the function reads nread bytes where nread is the minimum of maxbytes
     and the number of bytes before the end of file.
     the function returns nread.
     In output arguments:
        nbytes : number of bytes in record
                 if negative, this is a deleted record
                 if 0, cannot read record, wrong value of argument first
        objlen : uncompressed object size
        keylen : length of logical record header
     Note that the arguments objlen and keylen are returned only if maxbytes >=16

Long64_t GetSize() const

     Returns the current file size. Returns -1 in case the file could not
     be stat'ed.

TList* GetStreamerInfoList()

     Read the list of TStreamerInfo objects written to this file.
     The function returns a TList. It is the user'responsability
     to delete the list created by this function.

     Using the list, one can access additional information,eg:
       TFile f("myfile.root");
       TList *list = f.GetStreamerInfoList();
       TStreamerInfo *info = (TStreamerInfo*)list->FindObject("MyClass");
       Int_t classversionid = info->GetClassVersion();
       delete list;

void ls(Option_t *option) const

    *-*-*-*-*-*-*-*-*-*-*-*List File contents*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                    ==================
      Indentation is used to identify the file tree
      Subdirectories are listed first
      then objects in memory
      then objects on the file

Bool_t IsOpen() const

     Returns kTRUE in case file is open and kFALSE if file is not open.

void MakeFree(Long64_t first, Long64_t last)

    *-*-*-*-*-*-*-*-*-*-*-*Mark unused bytes on the file*-*-*-*-*-*-*-*-*-*-*
    *-*                    =============================
      The list of free segments is in the fFree linked list
      When an object is deleted from the file, the freed space is added
      into the FREE linked list (fFree). The FREE list consists of a chain
      of consecutive free segments on the file. At the same time, the first
      4 bytes of the freed record on the file are overwritten by GAPSIZE
      where GAPSIZE = -(Number of bytes occupied by the record).

void Map()

    *-*-*-*-*-*-*-*-*-*List the contents of a file sequentially*-*-*-*-*-*
    *-*                ========================================

      For each logical record found, it prints
         Date/Time  Record_Adress Logical_Record_Length  ClassName  CompressionFactor

      Example of output
      20010404/150437  At:64        N=150       TFile
      20010404/150440  At:214       N=28326     TBasket        CX =  1.13
      20010404/150440  At:28540     N=29616     TBasket        CX =  1.08
      20010404/150440  At:58156     N=29640     TBasket        CX =  1.08
      20010404/150440  At:87796     N=29076     TBasket        CX =  1.10
      20010404/150440  At:116872    N=10151     TBasket        CX =  3.15
      20010404/150441  At:127023    N=28341     TBasket        CX =  1.13
      20010404/150441  At:155364    N=29594     TBasket        CX =  1.08
      20010404/150441  At:184958    N=29616     TBasket        CX =  1.08
      20010404/150441  At:214574    N=29075     TBasket        CX =  1.10
      20010404/150441  At:243649    N=9583      TBasket        CX =  3.34
      20010404/150442  At:253232    N=28324     TBasket        CX =  1.13
      20010404/150442  At:281556    N=29641     TBasket        CX =  1.08
      20010404/150442  At:311197    N=29633     TBasket        CX =  1.08
      20010404/150442  At:340830    N=29091     TBasket        CX =  1.10
      20010404/150442  At:369921    N=10341     TBasket        CX =  3.09
      20010404/150442  At:380262    N=509       TH1F           CX =  1.93
      20010404/150442  At:380771    N=1769      TH2F           CX =  4.32
      20010404/150442  At:382540    N=1849      TProfile       CX =  1.65
      20010404/150442  At:384389    N=18434     TNtuple        CX =  4.51
      20010404/150442  At:402823    N=307       KeysList
      20010404/150443  At:403130    N=4548      StreamerInfo   CX =  3.65
      20010404/150443  At:407678    N=86        FreeSegments
      20010404/150443  At:407764    N=1         END

void Paint(Option_t *option)

    *-*-*-*-*-*-*-*-*-*-*-*Paint all objects in the file*-*-*-*-*-*-*-*-*-*-*
    *-*                    =============================

void Print(Option_t *option) const

    *-*-*-*-*-*-*-*-*-*-*-*Print all objects in the file*-*-*-*-*-*-*-*-*-*-*
    *-*                    =============================

Bool_t ReadBuffer(char *buf, Int_t len)

     Read a buffer from the file. This is the basic low level read operation.
     Returns kTRUE in case of failure.

Int_t ReadBufferViaCache(char *buf, Int_t len)

     Read buffer via cache. Returns 0 if cache is not active, 1 in case
     read via cache was successful, 2 in case read via cache failed.

void ReadFree()

    *-*-*-*-*-*-*-*-*-*-*-*-*Read the FREE linked list*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                      =========================
      Every file has a linked list (fFree) of free segments
      This linked list has been written on the file via WriteFree
      as a single data record

Int_t Recover()

    *-*-*-*-*-*-*-*-*Attempt to recover file if not correctly closed*-*-*-*-*
    *-*              ===============================================

      The function returns the number of keys that have been recovered.
      If no keys can be recovered, the file will be declared Zombie by
      the calling function.

Int_t ReOpen(Option_t *mode)

     Reopen a file with a different access mode, like from READ to
     UPDATE or from NEW, CREATE, RECREATE, UPDATE to READ. Thus the
     mode argument can be either "READ" or "UPDATE". The method returns
     0 in case the mode was successfully modified, 1 in case the mode
     did not change (was already as requested or wrong input arguments)
     and -1 in case of failure, in which case the file cannot be used
     anymore. The current directory (gFile) is changed to this file.

void Seek(Long64_t offset, ERelativeTo pos)

     Seek to a specific position in the file. Pos it either kBeg, kCur or kEnd.

void SetCompressionLevel(Int_t level)

    *-*-*-*-*-*-*-*-*-*Set level of compression for this file*-*-*-*-*-*-*-*
    *-*                ======================================

      level = 0 objects written to this file will not be compressed.
      level = 1 minimal compression level but fast.
      ....
      level = 9 maximal compression level but slow.

      Note that the compression level may be changed at any time.
      The new compression level will only apply to newly written objects.
      The function TFile::Map shows the compression factor
      for each object written to this file.
      The function TFile::GetCompressionFactor returns the global
      compression factor for this file.

Int_t Sizeof() const

     Return the size in bytes of the file header.

void Streamer(TBuffer &b)

     Stream a TFile object.

void SumBuffer(Int_t bufsize)

    *-*-*-*-*Increment statistics for buffer sizes of objects in this file*-*-*
    *-*      =============================================================

void UseCache(Int_t maxCacheSize, Int_t pageSize)

     Activate caching. Use maxCacheSize to specify the maximum cache size
     in MB's (default is 10 MB) and pageSize to specify the page size
     (default is 512 KB). To turn off the cache use maxCacheSize=0.
     Not needed for normal disk files since the operating system will
     do proper caching (via the "buffer cache"). Use it for TNetFile,
     TWebFile, TRFIOFile, TDCacheFile, etc.

Int_t Write(const char *, Int_t opt, Int_t bufsiz)

    *-*-*-*-*-*-*-*-*-*Write memory objects to this file*-*-*-*-*-*-*-*-*-*
    *-*                =================================
      Loop on all objects in memory (including subdirectories).
      A new key is created in the KEYS linked list for each object.
      The list of keys is then saved on the file (via WriteKeys)
      as a single data record.
      For values of opt see TObject::Write().
      The directory header info is rewritten on the directory header record.
      The linked list of FREE segments is written.
      The file header is written (bytes 1->fBEGIN).

Int_t Write(const char *n, Int_t opt, Int_t bufsize) const

     One can not save a const TDirectory object.

Bool_t WriteBuffer(const char *buf, Int_t len)

     Write a buffer to the file. This is the basic low level write operation.
     Returns kTRUE in case of failure.

Int_t WriteBufferViaCache(const char *buf, Int_t len)

     Write buffer via cache. Returns 0 if cache is not active, 1 in case
     write via cache was successful, 2 in case write via cache failed.

void WriteFree()

    *-*-*-*-*-*-*-*-*-*-*-*Write FREE linked list on the file *-*-*-*-*-*-*-*
    *-*                    ==================================
      The linked list of FREE segments (fFree) is written as a single data
      record

void WriteHeader()

    *-*-*-*-*-*-*-*-*-*-*-*Write File Header*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*
    *-*                    =================

void MakeProject(const char *dirname, const char * /*classes*/, Option_t *option)

     Generate code in directory dirname for all classes specified in argument classes
     If classes = "*" (default), the function generates an include file for each
     class in the StreamerInfo list for which a TClass object does not exist.
     One can restrict the list of classes to be generated by using expressions like:
       classes = "Ali*" generate code only for classes starting with Ali
       classes = "myClass" generate code for class MyClass only.

     if option = "new" (default) a new directory dirname is created.
                       If dirname already exist, an error message is printed
                       and the function returns.
     if option = "recreate", then;
                       if dirname does not exist, it is created (like in "new")
                       if dirname already exist, all existing files in dirname
                       are deleted before creating the new files.
     if option = "update", then new classes are added to the existing directory.
                       Existing classes with the same name are replaced by the
                       new definition. If the directory dirname doest not exist,
                       same effect as "new".
     if, in addition to one of the 3 above options, the option "+" is specified,
     the function will generate:
       - a script called MAKE to build the shared lib
       - a LinkDef.h file
       - rootcint will be run to generate a dirnameProjectDict.cxx file
       - dirnameProjectDict.cxx will be compiled with the current options in compiledata.h
       - a shared lib dirname.so will be created.
     if the option "++" is specified, the generated shared lib is dynamically
     linked with the current executable module.
     example:
      file.MakeProject("demo","*","recreate++");
      - creates a new directory demo unless it already exist
      - clear the previous directory content
      - generate the xxx.h files for all classes xxx found in this file
        and not yet known to the CINT dictionary.
      - creates the build script MAKE
      - creates a LinkDef.h file
      - runs rootcint generating demoProjectDict.cxx
      - compiles demoProjectDict.cxx into demoProjectDict.o
      - generates a shared lib demo.so
      - dynamically links the shared lib demo.so to the executable
      If only the option "+" had been specified, one can still link the
      shared lib to the current executable module with:
         gSystem->load("demo/demo.so");

void ReadStreamerInfo()

     Read the list of StreamerInfo from this file
     The key with name holding the list of TStreamerInfo objects is read.
     The corresponding TClass objects are updated.

void ShowStreamerInfo()

     Show the StreamerInfo of all classes written to this file.

void WriteStreamerInfo()

      Write the list of TStreamerInfo as a single object in this file
      The class Streamer description for all classes written to this file
      is saved.
      see class TStreamerInfo

TFile* Open(const char *name, Option_t *option, const char *ftitle, Int_t compress, Int_t netopt)

     Static member function allowing the creation/opening of either a
     TFile, TNetFile, TWebFile or any TFile derived class for which an
     plugin library handler has been registered with the plugin manager
     (for the plugin manager see the TPluginManager class). The returned
     type of TFile depends on the file name. If the file starts with
     "root:", "roots:" or "rootk:" a TNetFile object will be returned,
     with "http:" a TWebFile, with "file:" a local TFile, etc. (see the
     list of TFile plugin handlers in $ROOTSYS/etc/system.rootrc for regular
     expressions that will be checked) and as last a local file will be tried.
     Before opening a file via TNetFile a check is made to see if the URL
     specifies a local file. If that is the case the file will be opened
     via a normal TFile. To force the opening of a local file via a
     TNetFile use either TNetFile directly or specify as host "localhost".
     The netopt argument is only used by TNetFile. For the meaning of the
     options and other arguments see the constructors of the individual
     file classes. In case of error returns 0.

Int_t SysOpen(const char *pathname, Int_t flags, UInt_t mode)

     Interface to system open. All arguments like in POSIX open().

Int_t SysClose(Int_t fd)

     Interface to system close. All arguments like in POSIX close().

Int_t SysRead(Int_t fd, void *buf, Int_t len)

     Interface to system read. All arguments like in POSIX read().

Int_t SysWrite(Int_t fd, const void *buf, Int_t len)

     Interface to system write. All arguments like in POSIX write().

Long64_t SysSeek(Int_t fd, Long64_t offset, Int_t whence)

     Interface to system lseek. All arguments like in POSIX lseek()
     except that the offset and return value are of a type which are
     able to handle 64 bit file systems.

Int_t SysStat(Int_t, Long_t *id, Long64_t *size, Long_t *flags, Long_t *modtime)

     Return file stat information. The interface and return value is
     identical to TSystem::GetPathInfo(). The function returns 0 in
     case of success and 1 if the file could not be stat'ed.

Int_t SysSync(Int_t fd)

     Interface to system fsync. All arguments like in POSIX fsync().

Long64_t GetFileBytesRead()

Long64_t GetFileBytesWritten()

void SetFileBytesRead(Long64_t bytes)

void SetFileBytesWritten(Long64_t bytes)

### Inline Functions

                 Long64_t GetRelOffset() const
                     void operator=(const TFile&)
                     void Copy(TObject&) const
            TArchiveFile* GetArchive() const
                 TArrayC* GetClassIndex() const
                    Int_t GetCompressionLevel() const
                 Long64_t GetEND() const
                    Int_t GetFd() const
               TObjArray* GetListOfProcessIDs() const
                   TList* GetListOfFree() const
                    Int_t GetNfree() const
                    Int_t GetNProcessIDs() const
                Option_t* GetOption() const
                 Long64_t GetBytesRead() const
                 Long64_t GetBytesWritten() const
                    Int_t GetVersion() const
                    Int_t GetNbytesInfo() const
                    Int_t GetNbytesFree() const
                 Long64_t GetSeekFree() const
                 Long64_t GetSeekInfo() const
                     void IncrementProcessIDs()
                   Bool_t IsArchive() const
                     void SetEND(Long64_t last)
                     void SetOption(Option_t* option = ">")
                  TClass* Class()
                  TClass* IsA() const
                     void ShowMembers(TMemberInspector& insp, char* parent)
                     void StreamerNVirtual(TBuffer& b)

Author: Rene Brun 28/11/94
Last update: root/base:$Name: $:$Id: TFile.cxx,v 1.141 2005/06/23 06:24:27 brun Exp $
Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *