How can I open a ROOT file with a
# character in the path? Eg.
% ls -l art#/idpvm.root -rw-r--r--. 1 adye zp 762012 May 3 05:19 art#/idpvm.root % root root  f = TFile::Open("art#/idpvm.root") SysError in <TFile::ReadBuffer>: error reading from file art Is a directory Error in <TFile::Init>: art failed to read the file type data. (TFile *) nullptr
I guess this is a side-effect of the
TArchiveFile functionality, but I can’t get that to work anyway:
% tar tvf art.tar idpvm.root -rw-r--r-- usatlas3/usatlas 762012 2023-05-03 05:19 idpvm.root % root root  f = TFile::Open("art.tar#idpvm.root") Error in <TFile::Init>: art.tar not a ROOT file (TFile *) nullptr
Maybe that only works for files opened with the root protocol. If that’s the case, wouldn’t it be better if
TFile::Open interpreted the path literally for local files?
Background: why do I have files with
# in the path?
I am using AVFS to do something similar to
TArchiveFile, but for more than just ROOT access. It’s a pity that ROOT access is the one thing that doesn’t work, because AVFS also uses
# as an archive signifier.
I simplified the above examples to test without bothering with AVFS. What I actually want to do is: from the parent directory mounted with
mountavfs, I tried to access the file as:
% ls -l art.tar#/idpvm.root -rw-r--r--. 1 lhcb171 31152 762012 May 3 05:19 art.tar#/idpvm.root % root root  f = TFile::Open("art.tar#/idpvm.root") Error in <TFile::Init>: art.tar not a ROOT file (TFile *) nullptr
It’s much worse if I try to open the file from the command-line:
% root "art.tar#/idpvm.root" root  Processing art.tar... In file included from input_line_14:1: art.tar:1:1: error: cannot use dot operator on a type ... *** many many many more errors ***
I can work round it by symlinking
art.tar# from another “directory” without
# in the name, but that defeats much of the advantage of AVFS of being able to access any archive directly.
ROOT Version: 6.26/08