【发布时间】:2019-04-08 16:13:15
【问题描述】:
我创建了一个 R 闪亮的应用程序,它使用批处理文件每天自动运行。 启动应用程序时一切正常,但第二天它崩溃了,我收到以下消息:
Warning in file(open = "w+") :
cannot open file
'C:\Users\bertin\AppData\Local\Temp\RtmpKiBPOU\Rf3f835d1a66' : No such file or directory
Warning: Error in file: cannot open the connection
[No stack trace available]
实际上,这个问题与 R 会话执行闪亮应用程序创建的 tempdir() 文件夹有关。此文件夹会在一定时间后自动删除。我是否必须在每次刷新时删除所有临时文件?或者相反,是否需要防止 R 删除 Temp 文件夹中所有闪亮的临时文件?谢谢!
编辑 - 以下是故意生成错误的方法:
tempdir()
dir.exists(tempdir())
library(shiny)
# Windows shell required
shinyApp(
ui = fluidPage("Please reload to see me fail."),
server = function(input, output) {
shell(paste("rmdir", dQuote(
normalizePath(tempdir(), winslash = "/", mustWork = FALSE), q = FALSE
), "/s /q"))
}
)
【问题讨论】:
-
使用
tempdir()或tempfile()创建的任何内容都会在与它们关联的R 进程消失后消失。如果您正在使用这些并期望长期存储,您将会感到失望。如果您将某些东西存储在需要半永久性的“临时”目录中,则需要创建一个有意的路径来存储文件并从现在开始使用它并自行进行清理管理。跨度> -
感谢您的回答,但我没有在 tempdir() 或 tempfile() 上创建任何内容:这是由 R 在启动闪亮应用程序时自动创建的,并在一定时间后被系统自动删除...
-
@hrbrmstr 实际上是
shiny本身将文件存储在tempdir()中。这是一个相关的GitHub issue。我有同样的problem。 -
添加了一个 gif here 展示如何重现问题。
-
不错的 gif 再现性!从您的 github 评论中可以推断出您也在寻找解决方法?我唯一能想到的(不包括闪亮/rstudio 团队)将是以下内容:1)在闪亮的应用程序启动时调用一个函数,该函数会复制
tempdir(),称为paste0(tempdir(), "copy")2)也让检查启动闪亮应用程序是否存在 tempdir,如果不存在则将 tempdir 更改为复制路径 stackoverflow.com/questions/17107206/change-temporary-directory。然后为下一次制作另一个 tempdir 副本。 (复制文件对我来说失败了。)
标签: r shiny connection temp