我每天运行一个 autosys,它基本上从 ftp 服务器获取数据,然后对其进行处理并将其保存到共享驱动器和数据库中。该过程使用了解压方法
curl_download(url=ftp_url,destfile=zip_filename, mode="wb",handle=h)
file_list <- unzip(zip_filename,list=T)$Name
unzip(zip_filename,files=file_list,exdir=dir)
unlink(zip_filename)
其中
ftp_url
是 ftp 站点,zip_filename
是共享驱动器文件。
我在这个过程中收到随机错误,大多数时候是在解压缩部分,其中一些是“权限被拒绝”,“文件不存在”(因为解压缩成功但文件未在该位置提取)。
这些错误每天都会随机出现,出现几天后就不再出现。
有谁知道这些错误背后的原因
我尝试在失败时重新运行代码,但这不起作用
我不知道这是否有效,但我认为“共享驱动器”提供了出现问题的可能性。 (这可以是真实的网络驱动器,也可以是虚拟的网络驱动器,例如 dropbox、onedrive、nextcloud、owncloud 等)
尝试对下载和解压缩部分使用完全本地路径,然后完成后将生成的文件复制到共享驱动器。 (我假设
tempdir()
(在其下放置 tempfile
创建的文件)位于本地驱动器上,而不是共享驱动器上。)
tf <- tempfile(fileext = ".zip") # used for the download
td <- tempfile() # used for extraction
dir.create(td)
curl_download(url = ftp_url, destfile = tf, mode = "wb", handle = h)
file_list <- unzip(tf, list = TRUE)$Name
unzip(tf, files = file_list, exdir = td)
# assuming `dir` is a target directory
file.copy(file.path(td, file_list), dir)
# cleanup
unlink(tf)
unlink(td, recursive = TRUE)
如果您的 zip 文件包含子目录,您可能需要使用
file.copy(list.files(td, full.names = TRUE), dir, recursive = TRUE)
其中对
list.files
的新调用仅返回 td
中顶层的文件和目录,并且 recursive=TRUE
确保子目录中的文件也被复制。