将 R 临时文件保存到具有所需名称的 zip 中

问题描述 投票:0回答:1

我在闪亮的应用程序中生成文件,然后保存在临时文件中,稍后以 zip 形式下载。 然而,命名 zip 中的文件并不那么明显。 我用 ChatGPT 尝试解决这个问题一个多小时,但没有成功。

参见示例

library(zip)

filex <- 'file.csv'
file <- tempfile(fileext = ".csv")
write.csv(mtcars, file)

zip_file <- tempfile(fileext = ".zip")
zip::zipr(zip_file, files = file)
print(utils::unzip(zip_file, list = TRUE))

zip 文件的内容将类似于

file2d24470d428d.csv

我尝试创建一个命名向量,但没有成功

file2 <- file
names(file2) = filex
zip::zipr(zip_file, files = file2)
print(utils::unzip(zip_file, list = TRUE))

file3 <- filex
names(file3) = file
zip::zipr(zip_file, files = file3)
print(utils::unzip(zip_file, list = TRUE))

两种解决方案都不起作用。

主要问题是所有这些文件仅存在于 Shiny 和临时文件中,我无法将它们保存在其他地方,重命名等。

我寻找不同的包(archive,sf)。但同样,没有成功。

知道如何解决这个问题吗?

谢谢你

r shiny
1个回答
0
投票

更多的是关于

tempfile()
,生成唯一的文件名是它的预期行为。对于您的情况,您可能需要考虑
file.path(tempdir(), ...)

library(zip)

filex <- 'file.csv'
file <- file.path(tempdir(), filex)
file
#> [1] "C:\\Users\\m\\AppData\\Local\\Temp\\Rtmp4Gfo3K/file.csv"
write.csv(mtcars, file)

zip_file <- zip(tempfile(fileext = ".zip"), files = file, mode = "cherry-pick")
zip_file
#> [1] "C:\\Users\\m\\AppData\\Local\\Temp\\Rtmp4Gfo3K\\file478c4cf4302.zip"
zip_list(zip_file)
#>   filename compressed_size uncompressed_size           timestamp permissions
#> 1 file.csv             865              1816 2024-07-27 08:22:44         600
#>      crc32 offset
#> 1 742a8e58      0

创建于 2024-07-27,使用 reprex v2.1.0

© www.soinside.com 2019 - 2024. All rights reserved.