【问题标题】:File copy, making directories as necessary文件复制,根据需要制作目录
【发布时间】:2020-01-31 08:28:00
【问题描述】:

类似于https://stackoverflow.com/a/10268255/,我想要一个函数,当使用file.copy 时,它会自动创建不存在的子目录。当前我收到错误:

In file.copy( ... :
  'recursive' will be ignored as 'to' is not a single existing directory

不幸的是使用了这样的函数:

my.file.copy<- function(from, to, ...) {
    todir <- dirname(to)
    if (!isTRUE(file.info(todir)$isdir)) dir.create(todir, recursive=TRUE)
    file.copy(from = from,  to = to, ...)
}

如果to 是一个目录,则dirname 会去除最后一个子目录。

【问题讨论】:

    标签: r


    【解决方案1】:

    根据您将如何将to 参数传递给函数,我们可以使用其中之一。

    1) 如果您要传递 to 仅带有目录名,并希望它从 from 参数中获取文件名,我们可以使用以下函数

    my.file.copy_dir <- function(from, to, ...) {
       if (!dir.exists(to))  dir.create(to, recursive = TRUE) 
       file.copy(from = from,  to = paste0(to, basename(from)), ...)
    }
    

    2) 如果您要将to 作为新文件名的完整路径传递,我们可以使用

    my.file.copy_file <- function(from, to, ...) {
       if (!dir.exists(dirname(to)))  dir.create(dirname(to), recursive = TRUE) 
       file.copy(from = from,  to = to, ...)
    }
    

    并将它们用作:

    my.file.copy_dir("/path/of/file/report.pdf", "/new/path/of/file/")
    

    my.file.copy_file("/path/of/file/report.pdf", "/new/path/of/file/abc.pdf")
    

    【讨论】:

    • 函数有没有办法判断是自动传递的目录还是文件?
    • 啊,我想我可以使用:stackoverflow.com/questions/46147901/… 谢谢
    • @Alex 是的,您可以使用它,但理想情况下最好将输入标准化。如果您查看file.copy,它仅接受完整路径,而不接受文件夹和路径。
    • 我没有看到“file.copy 它只接受完整路径...”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 2013-05-01
    • 2020-03-22
    相关资源
    最近更新 更多