On 24/03/2018 6:16 AM, Joris Meys wrote:
Dear all,

while preparing some exercises I came across some highly surprising
behaviour of file.exists(). The specific value "prn.us.txt" always returns
TRUE, even though that file is nowhere to be found on my system.

That's a Windows "bug", not an R bug. Any name starting "prn" (upper or lowercase), followed by an extension (i.e. a dot and characters) is taken to be the DOS printer device. According to Writing R Extensions, names starting with "‘con’, ‘prn’, ‘aux’, ‘clock$’, ‘nul’, ‘com1’ to ‘com9’, and ‘lpt1’ to ‘lpt9' (possibly followed by extensions) are also bad. You can Google "PRN filename in Windows" to find lots of people confused by this. One page I get is

https://msdn.microsoft.com/en-us/library/aa365247(VS.85).aspx

but there's no guarantee that will work five minutes from now.

Duncan Murdoch


In a fresh R session 3.4.4 installed on Windows 10:

grep("prn.us.txt", dir(recursive = TRUE))
integer(0)
file.exists("prn.us.txt")
[1] TRUE
file.exists("pnr.us.txt")
[1] FALSE
file.exists("prn\\.us\\.txt")
[1] FALSE

sessionInfo()
R version 3.4.4 (2018-03-15)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 16299)

Matrix products: default

locale:
[1] LC_COLLATE=English_United Kingdom.1252
[2] LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252
[4] LC_NUMERIC=C
[5] LC_TIME=English_United Kingdom.1252

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base

loaded via a namespace (and not attached):
[1] compiler_3.4.4

This also happens in 3.4.3, 3.4.2 and 3.4.1 . It is confirmed by Roman
Lustrik on his system as well :
https://twitter.com/romunov/status/977486929380995072

I suspect this is a bug, or I must be missing something completely.

Cheers
Joris


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to