[Rd] Non-recursive way to remove empty directory on Windows?

Martin Maechler maechler at stat.math.ethz.ch
Fri Nov 30 11:47:07 CET 2012


>>>>> William Dunlap <wdunlap at tibco.com>
>>>>>     on Thu, 29 Nov 2012 02:36:54 +0000 writes:

    >> (even worse, path may contain '..' or
    >> likewise from a list.files(all.names=TRUE) call)

    > Would anyone's code break if "." and ".." were never in the output of
    > list.files() (or dir())?  I find it tedious to skip them
    > whenever doing anything recursive in the file system.  They are
    > not in the output of the unix find command and no one misses them
    > there.

At first, I've tended to agree with your implicit proposal.
I wouldn't be suprised if someone's code broke from such a
change, but then I think "Some One" gets what (s)he deserves  ...

But I'm less sure now that I've looked into the issue in more
details:
If you use 

(1)   list.files(*, all.files=TRUE)     # sic!  'all.names' does not exist

you implicitly say  'recursive=FALSE' , where

(2)   list.files(*, recursive=TRUE, ...)

implicitly contains  'include.dirs=FALSE'
on which the help page says

include.dirs: logical.  Should subdirectory names be included in
          recursive listings?  (There always are in non-recursive ones).

  {with a typo   s/There/They/  which I've corrected just now}

Hence, call  (2)   always excludes  "." and ".."

Would you reall see the need for an option to exclude "." and ".." also from
the non-recursive calls?

Martin Maechler,  ETH Zurich

    > Bill Dunlap
    > Spotfire, TIBCO Software
    > wdunlap tibco.com


    >> -----Original Message-----
    >> From: r-devel-bounces at r-project.org [mailto:r-devel-bounces at r-project.org] On Behalf
    >> Of Henrik Bengtsson
    >> Sent: Wednesday, November 28, 2012 6:25 PM
    >> To: R-devel
    >> Subject: [Rd] Non-recursive way to remove empty directory on Windows?
    >> 
    >> Hi,
    >> 
    >> file.remove(path) will remove an empty directory "on most Unix
    >> platforms", but not on Windows, cf. help("file.remove").  A workaround
    >> for Windows is then unlink(path, recursive=TRUE).  However, unless
    >> you're really careful and make sure 'path' is not empty, you may
    >> delete more than you wish (even worse, path may contain '..' or
    >> likewise from a list.files(all.names=TRUE) call).  Is there another
    >> *non-recursive* way to delete a single empty directory on Windows
    >> (without turning to system() calls)?
    >> 
    >> Thanks,
    >> 
    >> Henrik



More information about the R-devel mailing list