windows - 如何使用 R 检查字符串是否是 Windows 的有效文件名?

标签 windows r filenames

我一直在用 R 编写一个程序,该程序为我今年夏天与其他几个人合作的一个研究项目输出随机化方案,除了一个功能之外,我已经完成了其中的大部分内容。我一直在做的部分工作是使其真正用户友好,以便程序会提示用户输入某些信息,从而知道需要随机化哪些内容。我将其设置为检查每一个用户输入,以确保它是有效的输入,如果不是,则再次给出错误消息/提示用户。我唯一不太明白的是如何让它检查 .csv 输出的文件名是否有效。有谁知道是否有办法让 R 检查字符串是否构成有效的 Windows 文件名?谢谢!

最佳答案

不允许使用以下字符: /\:*?"<>| 。因此,如果它包含其中任何一个,请警告用户。

其他一些名称也是不允许的: COMAUXNULCOM1COM9LPT1LPT9

您可能想使用正则表达式检查文件名是否有效。请参阅另一个答案,了解 Java 示例,该示例只需进行最少的调整即可在 R 中工作。 https://stackoverflow.com/a/6804755/134830

您可能还想检查文件名长度(260 个字符以实现最大的可移植性,但某些系统允许更长的名称)。

最后,在 R 中,如果您尝试在不存在的目录中创建文件,它仍然会失败,因此您需要将名称拆分为文件名和目录名(使用 basenamedirname )并如有必要,请先尝试创建目录。

也就是说,David Heffernan 在他的评论中给出了很好的建议,让 Windows 来决定是否可以创建文件:您不想错误地告诉用户文件名无效。

你想要像这样的东西:

nice_file_create <- function(filename)
{
  directory_name <- dirname(filename)
  if(!file.exists(directory_name))
  {
    ok <- dir.create(directory_name)
    if(!ok)
    {
      warning("The directory of that path could not be created.")
      return(invisible())
    }
  }
  tryCatch(
    file.create(filename),
    error = function(e)
    {
      warning("The file could not be created.")
    }
  )
}

但首先要彻底测试一下!在各种边缘情况下,事情可能会失败:尝试 UNC 网络路径名、“~”和带有“.”的路径。和其中的“..”。

关于windows - 如何使用 R 检查字符串是否是 Windows 的有效文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17262493/

相关文章:

c++ - SWI-Prolog C++ 接口(interface)

java - 如何将 Microsoft Locale ID (LCID) 转换为 Java 中的语言代码或 Locale 对象

r - 范围联接data.frames-R中的日期范围/间隔的特定日期列

python - Python中字符串的变量名

javascript - 检查变量是否包含数组中的任何字符

c++ - 使用 SendInput 激活 windows "Alt Tab"切换器

c++ - CryptEncrypt 不加密整个文本

从字符串中删除反斜杠

r - 将单列分成 3 列,保留原始列 (R)

java - 如何在 Java 中解开 Windows 文件名?