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

hb@maths.lth.se hb@maths.lth.se
Mon, 24 Sep 2001 13:30:20 +0200 (MET DST)


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
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.
...

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.

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



-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
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
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._