[Rd] Trailing "/" makes file.exists() return FALSE (PR#1098)

ripley@stats.ox.ac.uk ripley@stats.ox.ac.uk
Mon, 24 Sep 2001 13:50:32 +0200 (MET DST)


On Mon, 24 Sep 2001, Henrik Bengtsson wrote:

> I agree to some extend, but I believe a consistent behavior across platforms
> is something that should be a goal. Originally I found this problem from a

But the underlying OSes are not consistent, and the nature of your `bug'
report is that R is being truthful on each.  Which is the sort of
consistency we want.

> package (by a group only running WinNT and Solaris) trying to do
>
>    system.file("",package="base")
>
> which should work and give a path according to the help;
>
> Usage:
>
>      system.file(..., package = "base", lib.loc = .lib.loc, pkg, lib)
>
> Arguments:
>
>      ...: character strings, specifying subdirectory and file(s) within
>           some package.  The default, none or `""', returns the root of
>           the package.  Wildcards are not supported.
> ...

That's not correct, and not in the current R sources.  It is a
documentation bug that has already been fixed: search the bug report
database for system.file (it's not talking to me right now).

> Doing this on WinMe it gives "". I can't try this on WinNT, but I assume it
> works since the group that made the package it using it. I tracked down the
> problem to originate in either the .find.package() call or the file.exists()
> call done within system.file(). Which one is a matter of taste. Also, I
> noticed that system.file(package="base") without the "", gives the wanted
> result.
>
> However, I still argue that file.exists() should be robust enough to give
> the same answer if the argument is "foo/" or "foo". I don't know about any
> filesystem that can have a file and a directory with the same name in the
> same directory, so that shouldn't be an issue. Looking at Java, its solution
> (java.io) is very robust across platforms. I am always thinking about the
> end-user and making their life easier.

In which case think what happens when file.exists() incorrectly reports a
file as existing when it does not, and the user then tries to make use of
the file?  Let me stress (since you do seem to have missed the point) that
"foo/" is not a file on Windows, nor a directory on Windows. It does not
exist.  Whatever would be the point of a test that lied to you?


> Thanks for a great work
>
> Henrik Bengtsson
>
> Dept. of Mathematical Statistics @ Centre for Mathematical Sciences
> Lund Institute of Technology/Lund University, Sweden (+2h UTC)
> Office: P316, +46 46 222 9611 (phone), +46 46 222 4623 (fax)
> hb@maths.lth.se, http://www.maths.lth.se/matstat/staff/hb/
>
>
> > -----Original Message-----
> > From: Prof Brian Ripley [mailto:ripley@stats.ox.ac.uk]
> > Sent: Monday, September 24, 2001 12:10 PM
> > To: hb@maths.lth.se
> > Cc: R-bugs@biostat.ku.dk
> > Subject: Re: [Rd] Trailing "/" makes file.exists() return FALSE
> > (PR#1098)
> >
> >
> > On Mon, 24 Sep 2001 hb@maths.lth.se wrote:
> >
> > > Full_Name: Henrik Bengtsson
> > > Version: 1.3.1
> > > OS: WinMe
> > > Submission from: (NULL) (130.235.2.229)
> > >
> > >
> > > I found the following bug on WinMe (I call it a bug, since the
> > behavior is
> > > different on WinMe than for instance Sun Solaris):
> > >
> > > When calling file.exists() with an existing directory name
> > ending with a "/"
> > > (slash) [R] on WinMe will return FALSE, but when doing the same
> > without the
> > > ending "/" it will give TRUE.
> > >
> > > I made a quick work around, but this should be taken care of in
> > the native
> > > code:
> > >
> > > file.exists <- function(...) {
> > >   # Remove trailing "/", but keep "C:/", "D:/"...
> > >   files <- gsub("\:/$", "\://", c(...));
> > >   files <- gsub("/$", "", files);
> > >   .Internal(file.exists(files));
> > > }
> >
> >
> > This is not a bug.  A file path ending with "/" is not a file on Windows,
> > but it is on Solaris.  Next you'll be reporting that file specifications
> > with drives fail on Solaris: it other words, what is a valid file path is
> > OS-specific.
> >
> > You'll find quite a lot of Windows tools reject paths ending in /: for
> > example the ls in Rtools thinks the directory is non-existent.
> >
> > Similarly, Solaris accepts // in paths, but Windows does not.
> >
> > > platform i386-pc-mingw32
> > > arch     x86
> > > os       Win32
> > > system   x86, Win32
> > > status
> > > major    1
> > > minor    3.1
> > > year     2001
> > > month    08
> > > day      31
> > > language R
> > >
> > >
> > >
> > -.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
> > -.-.-.-.-.-.-
> > > r-devel mailing list -- Read
> http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
> > Send "info", "help", or "[un]subscribe"
> > (in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
> >
> _._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._.
> _._
> >
>
> --
> Brian D. Ripley,                  ripley@stats.ox.ac.uk
> Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
> University of Oxford,             Tel:  +44 1865 272861 (self)
> 1 South Parks Road,                     +44 1865 272860 (secr)
> Oxford OX1 3TG, UK                Fax:  +44 1865 272595
>
>
>

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
Professor of Applied Statistics,  http://www.stats.ox.ac.uk/~ripley/
University of Oxford,             Tel:  +44 1865 272861 (self)
1 South Parks Road,                     +44 1865 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595


-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._