将字符验证为文件路径?

时间:2011-10-15 16:18:52

标签: r

确定某个字符是否为有效文件路径的最佳方法是什么?因此CheckFilePath( "my*file.csv")将返回FALSE(在Windows *上为无效字符),而CheckFilePath( "c:\\users\\blabla\\desktop\\myfile.csv" )将返回TRUE

请注意,文件路径可以有效但磁盘上不存在。

4 个答案:

答案 0 :(得分:2)

这是save用于执行该功能的代码:

 ....
 else file(file, "wb")
            on.exit(close(con))
        }
        else if (inherits(file, "connection")) 
            con <- file
        else stop("bad file argument")
 ......

答案 1 :(得分:1)

也许file.exists()就是你所追求的?从帮助页面:

file.exists returns a logical vector indicating whether the files named by its argument exist.
(Here ‘exists’ is in the sense of the system's stat call: a file will be reported as existing only
if you have the permissions needed by stat. Existence can also be checked by file.access, which
might use different permissions and so obtain a different result. 

还可以使用其他一些用于访问计算机文件系统的功能,也可以在帮助页面上参考。

答案 2 :(得分:1)

不,没有办法(可靠)。我没有在Windows和Linux中都看到操作系统界面来测试它。您通常会尝试创建文件并获取失败消息,或尝试读取文件并获取“不存在”的消息。

因此,您应该依赖操作系统来告诉您是否可以对文件执行操作(通常会读取和/或写入)。

我想不出除测验之外的其他原因(“输入有效的完全限定的Windows文件路径:”)来想知道这个。

答案 3 :(得分:0)

我建议尝试使用checkPathForOutput软件包提供的checkmate功能。如链接文档中所述,该功能:

  

检查文件路径是否可以安全地用于创建文件和写入文件。

示例

checkmate::checkPathForOutput(x = tempfile(pattern = "sample_test_file", fileext = ".tmp"))
# [1] TRUE
checkmate::checkPathForOutput(x = "c:\\users\\blabla\\desktop\\myfile.csv")
# [1] TRUE

无效的路径

在Linux 1 文件名中,不应使用

\0字符:

checkmate::check_path_for_output("my\0file.csv")
# Error: nul character not allowed (line 1)

1 尚未在Windows上进行测试,但是查看代码checkmate::check_path_for_output则表明该功能也应在MS Windows系统上正常工作。