如何读取指定文件夹中Zip文件的创建日期与时间?
读取文件夹中Zip文件的创建与修改时间
我来帮你解决这个问题!你之前遇到的问题主要是没有给file.info()提供完整的文件路径,导致它找不到对应的Zip文件,所以返回了NA。咱们一步步来修正:
问题根源
- 你用
list.files("C:/Users/foo ", pattern=".zip")只得到了Zip文件的文件名,但file.info()需要完整的文件路径才能定位到文件,直接传文件名的话,它会在当前工作目录查找,自然找不到目标文件,所以返回NA。 - 而
file.info("C:/Users/foo/")$mt读取的是文件夹本身的修改时间,不是里面文件的时间,这也不是你想要的结果。
正确解决方案
方法1:用基础R实现(Windows优先)
核心是给list.files()加上full.names = TRUE参数,获取带完整路径的Zip文件列表:
# 定义目标文件夹路径 target_folder <- "C:/Users/foo/" # 获取所有Zip文件的完整路径(注意pattern要用转义的\\.zip$,避免匹配到名字里带zip的非Zip文件) zip_full_paths <- list.files( path = target_folder, pattern = "\\.zip$", full.names = TRUE, recursive = FALSE # 如果不需要遍历子文件夹,保持FALSE;需要的话设为TRUE ) # 读取文件信息 zip_file_info <- file.info(zip_full_paths) # 提取你需要的时间: # - Windows系统中,ctime是文件的创建时间 # - mtime是文件的最后修改时间 creation_times <- zip_file_info$ctime modification_times <- zip_file_info$mtime # 查看结果 print(creation_times)
方法2:用fs包实现(跨平台更可靠)
如果你的代码需要在Windows、macOS或Linux上都能正确获取创建时间,推荐使用fs包,它对跨平台的文件属性支持更友好:
# 先安装fs包(如果没装过) # install.packages("fs") library(fs) target_folder <- "C:/Users/foo/" # 获取Zip文件的完整路径 zip_full_paths <- dir_ls( path = target_folder, regexp = "\\.zip$", recurse = FALSE ) # 读取文件信息,birth_time就是跨平台的创建时间 zip_fs_info <- file_info(zip_full_paths) creation_times_cross <- zip_fs_info$birth_time modification_times_cross <- zip_fs_info$modification_time # 查看结果 print(creation_times_cross)
注意事项
- 正则表达式
\\.zip$确保只匹配以.zip结尾的文件,避免误匹配比如test.zip.txt这类文件。 - Windows系统的
file.info()中,ctime代表创建时间,但在Linux/macOS中,ctime是文件状态改变时间,不是创建时间,这时候用fs包的birth_time更准确。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

