You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言readLines读取路径报无法打开连接、权限被拒错误如何解决

报错根因
  1. 路径传入错误:list.files() 默认会返回目标目录下所有子项路径,同时包含普通文件和子文件夹。你报错路径对应的002是子文件夹而非文本文件,readLines()仅支持读取文本类文件,传入文件夹路径时,Windows系统不允许以文本流方式打开文件夹对象,就会抛出"Permission denied"提示,和实际访问权限、杀毒软件、工作目录配置无关。
  2. 函数认知偏差:
    • 单独测试readLines读取txt正常,是因为传入了符合要求的文本文件路径
    • 替换为readline后无报错,是因为readline是交互式输入函数,仅会把传入的路径字符串作为控制台提示语打印,根本不会读取路径对应的本地文件,和文件读取逻辑完全无关
    • 手动用paste0拼接子文件路径能临时运行,本质是把传入readLines的参数从「子文件夹路径」改成了「具体文本文件路径」,刚好符合函数入参要求
  3. 隐含笔误:原代码定义长度变量时写的是大写开头的Ids_no,循环调用时写的是小写开头的ids_no,R对大小写敏感,这个笔误也会触发对象不存在的报错。
可行解决方案

方案1:直接读取当前目录下的所有文本文件

遍历前先过滤掉子文件夹,仅保留可读取的普通文件,不需要手动拼接路径:

setwd("C:/Users/JJ/Desktop/features")
file_directory <- "C:/Users/JJ/Desktop/features"
# 获取目录下所有子项路径
all_items <- list.files(file_directory, full.names = TRUE)
# 过滤掉子目录,仅保留普通文件
file_paths <- all_items[!file.info(all_items)$isdir]
# 如果仅需要读取txt格式文件,可直接用规则过滤
# file_paths <- list.files(file_directory, full.names = TRUE, pattern = "\\.txt$")

ids_no <- length(file_paths)
data_list <- list()
for (i in 1:ids_no){
  data_list[[i]] <- readLines(file_paths[i])
}

方案2:读取所有子文件夹下的固定命名文件

如果你的需求是遍历每个子文件夹,读取其中的feature.txt文件,可以用路径处理函数优化手动拼接的逻辑,避免斜杠书写错误:

file_directory <- "C:/Users/JJ/Desktop/features"
# 获取当前目录下所有一级子文件夹路径
sub_dirs <- list.dirs(file_directory, full.names = TRUE, recursive = FALSE)
# 自动拼接目标文件路径,过滤掉不存在的无效路径
target_files <- file.path(sub_dirs, "feature.txt")
target_files <- target_files[file.exists(target_files)]

# 批量读取文件,lapply会直接返回和文件顺序对应的列表
all_feature_data <- lapply(target_files, readLines)

注:file.path()会自动适配不同操作系统的路径分隔符,比手动用paste0拼接路径的兼容性更好。

内容的提问来源于stack exchange,提问作者zeno Zeng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:36:27