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

R项目跨多级目录使用相对路径读取文件报错如何排查解决

问题原因

该问题和.Rproj对应的工作目录嵌套深度无直接关系,核心诱因是Windows系统默认的Win32 API路径长度限制:

  • Windows默认对传统Win32程序的路径长度限制为260个字符(含路径终止空字符),超过该长度的路径,未适配长路径的程序会直接读取失败
  • list.files()由R核心层调用系统目录遍历接口实现,在Windows平台可正常识别超长路径下的文件,因此能正常返回文件名;但readxl包底层依赖的xls/xlsx解析库旧编译版本未适配长路径逻辑,路径总字符数超过阈值时就会读取失败
  • 你观察到的「路径到E层级可正常读取、到F层级读取失败」「文件上移一级即可正常读取」现象,本质是路径总字符数刚好在阈值边界浮动,和相对路径的../层级数无直接关联。

补充:你代码里list.files的pattern参数写为.xslx属于笔误,正确后缀应为.xlsx,该笔误不影响本次问题定位。

解决方案

可根据实际场景选择以下任意一种方案修复:

  • 缩短路径总长度
    将项目目录向磁盘根目录移动、简化上层目录命名,把目标文件路径总字符数控制在260字符以内即可正常读取,你之前将文件上移一级读取成功就是该逻辑。
  • 开启系统长路径支持(推荐长期使用)
    1. 按Win+R输入gpedit.msc打开本地组策略编辑器,依次进入「计算机配置 > 管理模板 > 系统 > 文件系统」,找到「启用Win32长路径」选项设置为「已启用」,保存后重启电脑
    2. 将R升级到4.2及以上版本(该版本开始R核心原生支持Windows长路径),同时将readxl包更新到最新版本,即可正常读取任意深度的路径文件。
  • 用Windows短路径格式绕开限制
    无需修改系统设置或移动文件,通过shortPathName()将超长路径转换为Windows兼容的8.3格式短路径,再传入读取函数即可,示例代码:
library(readxl)
# 先将相对路径转换为标准绝对路径,再生成兼容短路径
target_file <- shortPathName(normalizePath("../../04/folder 1/test.xlsx", mustWork = TRUE))
df <- read_excel(target_file)
  • 目录软链接映射
    通过file.symlink()将存放数据的04目录映射到当前.Rproj所在目录下,后续读取时直接使用当前项目下的短路径即可,无需书写多层上级相对路径。

排查小技巧:可执行nchar(normalizePath("目标文件路径"))查看路径总字符数,若数值大于260即可确认是长路径限制问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:33:29