如何检查是否可以写入特定的文件名?理想情况下,我想要一个与file.exists()一样的函数 - 它返回TRUE或FALSE,并且在测试时不会吐出任何错误。
理想的例子:
filename = "X:/an/invalid/path"
file.writable(filename) # returns FALSE
我还没有找到已经完成此功能的功能,并且无法真正考虑如何去做。
一个想法是尝试将一些垃圾数据写入filename
,但我无法弄清楚使用try()
或tryCatch()
来避免大量错误消息的复杂性出来。这也有覆盖文件名的缺点,你可能不想发生这种情况。
答案 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 package有is.writable
个功能。
你可以用它来编写你的函数:
file.writable <- function(path) {
assertthat::is.string(path) &&
file.exists(path) &&
assertthat::is.writeable(path)
}