Копирование файлов, создание каталогов по мере необходимости - PullRequest
0 голосов
/ 02 октября 2019

Аналогично 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, ...)
}

не работает, поскольку dirname удаляет последний подкаталог, если to является каталогом.

1 Ответ

1 голос
/ 02 октября 2019

В зависимости от того, как вы собираетесь передать параметр 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...