What I finally ended up doing was using the file() command to see if I could open a writeable connection to a pdf, then closing the connection before opening the file with cairo_pdf.
However, my whole effort may be pointless. The cairo_pdf() device is crashing R on Windows so often as to be mostly useless. Kevin On Thu, Sep 11, 2014 at 3:56 PM, Henrik Bengtsson <h...@biostat.ucsf.edu> wrote: > A poor mans solution would be to try to temporarily delete or move the > file, depending exactly what you wish to do. You can also try: > > library("R.utils") > pathname <- Arguments$getWritablePathname("file2.pdf", mustNotExist=FALSE) > > which does lots of assertions of write permissions of new and existing > file, in the target directory etc. and tries to give an informative > error if it fails. However, it does not have a particular > test/message for "locked" PDF files. This is the error message I get > when I view a PDF in Adobe Reader on Windows: > > > pathname <- Arguments$getWritablePathname("file2.pdf", > mustNotExist=FALSE) > [2014-09-11 13:42:14] Exception: No permission to modify existing file: > file2.pd > f > > at #03. getWritablePathname.Arguments(static, ...) > - getWritablePathname.Arguments() is in environment 'R.utils' > > at #02. getWritablePathname(static, ...) > - getWritablePathname() is in environment 'R.utils' > - originating from '<text>' > > at #01. Arguments$getWritablePathname("file2.pdf", mustNotExist = FALSE) > - Arguments$getWritablePathname() is local of the calling > function > > Error: No permission to modify existing file: file2.pdf > In addition: Warning message: > In fileAccess.default(pathname, mode = 2) : > file.access(..., mode=2) and file(..., open="ab") gives different > results (0 != -1). Will use the file() results: file2.pdf > > > Note that it is not all PDF viewers that lock/prevent files from being > overwritten. For instance, when I view the same file using Foxit > Reader, I don't get an error, e.g. > > library("R.utils") > pathname <- Arguments$getWritablePathname("file2.pdf", mustNotExist=FALSE) > pdf(pathname) > plot(1:10) > dev.off() > > > Better yet, just use the R.devices package > [http://cran.r-project.org/web/packages/R.devices/index.html] and > it'll all be take care of for you: > > library("R.devices") > devEval("png", name="file1", { > plot(1:10) > }) > > library("R.devices") > devEval("cairo_pdf", name="file2", { > plot(1:10) > }, ext="pdf") > > You'll get the above error message if, say, Adobe Reader is preventing > the file from being overwritten. This approach will make sure to > close any opened graphics devices, not to leave incomplete image files > behind if there is an errors and so on. There are plenty of option > for it, e.g. the default output directory is "./figures/", which can > be changed. (The need for argument ext="pdf" is due to a minor bug > that will be fixed in the next release.) > > > Hope this helps, > > Henrik > (author of R.utils and R.devices) > > On Thu, Sep 11, 2014 at 1:06 PM, Kevin Wright <kw.s...@gmail.com> wrote: > > On Windows: > > > > The pdf("file1.pdf") command will throw an error if the file1.pdf is open > > in a viewer. For example: > > > > pdf("file1.pdf") > > plot(1:10) > > dev.off() > > shell.exec("file1.pdf") > > pdf("file1.pdf") # Causes an error > > > > As suggested by the help page for file.access(), I normally use > > try(pdf("file1.pdf")) to test if file1.pdf is open. > > > > Oddly, I cannot do the same using cairo_pdf. For example: > > > > cairo_pdf("file2.pdf") > > plot(1:10) > > dev.off() > > shell.exec("file2.pdf") > > cairo_pdf("file2.pdf") # No error > > > > It is not until a plotting command is called that an error is generated. > > > > Is there a way to test if a pdf file can be written to by cairo_pdf ? > > > > I'd rather not wrap all plotting commands with try()....I have many such > > commands in my script and the choice of which one is first depends on > user > > input. > > > > Kevin Wright > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > R-help@r-project.org mailing list > > https://stat.ethz.ch/mailman/listinfo/r-help > > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > > and provide commented, minimal, self-contained, reproducible code. > -- Kevin Wright [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.