【问题标题】:How to check a file is opened or closed in R如何检查文件在R中打开或关闭
【发布时间】:2013-11-18 01:47:07
【问题描述】:

我想问在R编程中阅读之前如何检查文件的状态(是打开还是关闭)?

我试过myfile = open(filenames);它不起作用。

【问题讨论】:

    标签: r file


    【解决方案1】:

    我认为诀窍是使用open = "w" 打开写作。这对我来说似乎很有效:

    file.opened <- function(path) {
      suppressWarnings(
        "try-error" %in% class(
          try(file(path, 
                   open = "w"), 
              silent = TRUE
          )
        )
      )
    }
    

    打开 Excel 文件后:

    file.opened("C:\\Folder\\tbl1.xlsx")
    # TRUE
    

    当我关闭它时:

    file.opened("C:\\Folder\\tbl1.xlsx")
    # FALSE
    

    【讨论】:

    • 当我运行这个函数时,它会损坏 Excel 文件。有时我仍然可以在使用一两次后打开文件,但是如果我继续使用它,问题会在以后发生。尝试用 Excel 打开它会给出“文件格式或文件扩展名无效”,使用 openxlsx::read.xlsx() 会给出:“文件错误(con,“r”):无效的 'description' 参数:警告消息:在 unzip(xlsxFile, exdir = xmlDir) 中:从 zip 文件中提取错误 1"
    • 这很奇怪,我从来没有遇到过这个问题。你有任何 Excel 文件吗?
    • 是的,即使是我刚刚创建的空文件。我正在使用 Excel 365。
    【解决方案2】:

    当您使用函数file 时,将返回到文件的连接:

    con <- file(description="path/to/file", ...)
    

    您可以使用isOpen 函数检查它是否已打开,该函数将返回logicalTRUEFALSENA)。

    如果您的 R 会话中没有 connection,或者连接已被删除,则连接已关闭:

    摘录?file

     ‘close’ closes and destroys a connection.  This will happen
     automatically in due course (with a warning) if there is no longer
     an R object referring to the connection.
    

    文件连接可以分别使用openclose打开和关闭。

    【讨论】:

    • 基本上你想使用file 而不是open :)
    • 我尝试使用 MS-Word 文档,但没有成功。 isOpen 返回FALSE,无论文档是否打开。
    • @DanChaltiel isOpen 不会检查文件是否在任何应用程序中打开,它会检查特定连接是否在 R 中打开,例如在上面的例子中,con 变量。
    • 一般情况下,您无法检查文件当前是否在另一个程序中打开。有关此问题的一些讨论,请参阅stackoverflow.com/questions/1951791/…
    【解决方案3】:

    对于 Excel 文件,我使用了以下方法,它可以在我的计算机上运行:用它的名称重命名 Excel 文件。如果打开 Excel 文件,则返回 FALSE。如果 Excel 文件已关闭,则返回 TRUE。

    file.rename(from = "C:/Users/xxx/Desktop/Test file access/file1.xlsx",
                to = "C:/Users/xxx/Desktop/Test file access/file1.xlsx")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-20
      • 2012-02-02
      • 2011-10-08
      • 2022-01-16
      相关资源
      最近更新 更多