如何检查R中的文件名是否可写?

时间:2015-07-03 18:49:40

标签: r file

如何检查是否可以写入特定的文件名?理想情况下,我想要一个与file.exists()一样的函数 - 它返回TRUE或FALSE,并且在测试时不会吐出任何错误。

理想的例子:

filename = "X:/an/invalid/path"
file.writable(filename) # returns FALSE

我还没有找到已经完成此功能的功能,并且无法真正考虑如何去做。

一个想法是尝试将一些垃圾数据写入filename,但我无法弄清楚使用try()tryCatch()来避免大量错误消息的复杂性出来。这也有覆盖文件名的缺点,你可能不想发生这种情况。

2 个答案:

答案 0 :(得分:10)

修改

在查看@Marek建议的函数之后,事实证明已经有一个函数在名为file.access的基础中执行此操作。如果您阅读了警告,他们会在评论中讨论@KonradRudolph提到的问题(即文件访问权限可能会发生变化)。

所以,你需要做的就是

## Mode 2 for write permission
file.access(filename, mode=2)  # 0 success / -1 failure

按照你的建议行事(因为@NickK指出这会覆盖文件!)

file.writable <- function(fname)
    tryCatch({
        suppressWarnings(write.table(1, fname))
    }, error=function(e) FALSE)

filename = "X:/an/invalid/path"
file.writable(filename)
# [1] FALSE

答案 1 :(得分:5)

哈德利assertthat packageis.writable个功能。

你可以用它来编写你的函数:

file.writable <- function(path) {
    assertthat::is.string(path) &&
    file.exists(path) &&
    assertthat::is.writeable(path)
}
相关问题