如何检查是否可以写入特定的文件名?理想情况下,我想要一个与file.exists()工作方式相同的函数 - 它返回TRUE或FALSE,并且在测试时不会吐出任何错误.
理想的例子:
filename = "X:/an/invalid/path"
file.writable(filename) # returns FALSE
Run Code Online (Sandbox Code Playgroud)
我还没有找到一个已经完成此功能的功能,并且无法真正考虑如何去做.
一个想法是尝试编写一些垃圾数据filename,但我无法弄清楚使用try()或tryCatch()避免出现大量错误消息的复杂性.这也有覆盖文件名的缺点,你可能不想发生这种情况.
pic*_*ick 10
在查看了@Marek建议的函数之后,事实证明已经有一个函数可以在base中调用它file.access.如果您阅读了警告,他们会在评论中讨论@KonradRudolph提到的问题(即文件访问权限可能会发生变化).
所以,你需要做的就是
## Mode 2 for write permission
file.access(filename, mode=2) # 0 success / -1 failure
Run Code Online (Sandbox Code Playgroud)
做你的建议(因为@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
Run Code Online (Sandbox Code Playgroud)
is.writableHadley的assertthat包中有函数。
您可以使用它将函数编写为:
file.writable <- function(path) {
assertthat::is.string(path) &&
file.exists(path) &&
assertthat::is.writeable(path)
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |