UPDATE
Я знал, что это должно было быть построено в и нашел, что это отделено от utils::file.…
операции все пути в base::Sys…
операций:
Sys.setFileTime(path, time)
¯\_(ツ)_/¯
Хотя, почему это не было расширено, чтобы включить настройку actime
(время доступа) и modtime
(время модификации) отдельно вне меня. Доступ к явно означает, что последний раз содержимое файла было проверено. Модификация означает время содержимое файла было изменено (и есть POSIX правила для того, что представляет собой каждое с точки зрения SYS вызова.
я был вынужден обновить ответ с более авторитетным решением (хотя мое больше в духе определений POSIX, несмотря на не используя utimensat
-., который не доступен на большинстве систем) Просто помните, что с помощью встроенного в растворе, вы затирания как доступ и изменять против просто изменить
.
Я не мог загрузить этот сайт, и я думаю, что ваша проблема решена с помощью переключателя curl
от libcurl
в extra
, но это более общее решение (проверено на MacOS & Windows), что я тестировал с известным сайтом рабочего FTP:
library(curl)
library(Rcpp)
library(inline)
h <- new_handle()
handle_setopt(h, filetime=TRUE, verbose=TRUE) # verbose is just for my debugging
h <- curl_fetch_disk("ftp://ftp.ngdc.noaa.gov/STP/SOLAR_DATA/AIRGLOW/IGYDATA/abst5270",
"abst5270", h)
h$modified
## [1] "1999-10-22 18:59:10 EDT"
as.numeric(h$modified)
## [1] 940633150
set_modtime <- rcpp(sig=c(path="character", ts="integer"), body=
" struct stat f_stat;
struct utimbuf ftp_time;
std::string file_path = as<std::string>(path);
long file_ts = as<long>(ts);
if (stat(file_path.c_str(), &f_stat) >= 0) {
ftp_time.actime = f_stat.st_atime;
ftp_time.modtime = file_ts;
utime(file_path.c_str(), &ftp_time);
}
", includes=c("#include <time.h>", "#include <utime.h>", "#include <sys/stat.h>"))
# Changes it to way back in the past
invisible(set_modtime("abst5270", as.numeric(h$modified)))
# Changes it back to right now
invisible(set_modtime("abst5270", as.numeric(Sys.time())))
Для этого нужно было бы некоторые дополнительные проверки и обработка исключений в пакете, но это SHLD отлично работайте в скрипте.
Учтите, что вам необходимо использовать полный путь или доступный рабочий относительный путь (это может быть очевидным, но я хотел убедиться, что это было объяснено).
try 'method =" curl "' vs 'method =" libcurl "' – hrbrmstr
@hrbrmstr Переход к 'method =" curl "'вызывает две ошибки: ** ошибка 127 ** и ** загрузка отличного от нуля статуса выхода ** –
Я думаю, это означает, что двоичный файл 'curl' не находится в системе' PATH', что неудивительно, так как это Windows и вряд ли будет установлено. – hrbrmstr