IO 错误: 当文件已存在时,无法创建该文件 (os error 183) - cc-switch
Quick fix
配置目录(如 .claude/.codex)被设成了 Junction/硬链接导致报错;去掉链接属性改用普通目录即可临时规避,等待 cc-switch 修复。
Symptom
Section titled “Symptom”IO 错误: C:\Users\xxx\.claude: 当文件已存在时,无法创建该文件。 (os error 183)当工具的配置目录(C:\Users\<user>\.claude、.codex,或 Claude Desktop 3p 模式的 %LOCALAPPDATA%\Claude-3p)是一个 Windows 目录 Junction / 硬链接(常见于为省 C 盘空间把数据目录迁移到其他盘的用户,例如用 mklink /J 指向 D 盘或 E 盘)时,cc-switch 3.19.1 在切换供应商前会调用 std::fs::create_dir_all 创建该目录,而这个 API 对已存在的 Junction/重解析点会错误地返回 os error 183(当文件已存在时,无法创建该文件),于是切换流程在真正写入配置前就报错中断。
同一问题在不同工具上表现一致:Claude Code(.claude 为硬链接,见 #5993)、Codex(.codex 为 junction,见 #6030)、Claude Desktop 3p(Claude-3p 为 junction,见 #6107)。#6030 给出的代码级修复方向是在调用 create_dir_all 前先检查解析后的路径是否已是目录;目前 issue 中没有已发布修复版本的信息。#6107 还指出报错后配置有时实际上仍写入成功,因此弹窗具有一定误导性。
确认报错路径(如 C:\Users\<user>\.claude、.codex 或 %LOCALAPPDATA%\Claude-3p)是否为 Junction 或硬链接——本问题只在这种布局下触发。
临时规避:删除该目录的 Junction/硬链接,把配置目录改回普通的本地真实目录,再重新在 cc-switch 中切换供应商。
如果必须保留 Junction(例如为节省 C 盘空间),可以暂时手动在链接指向的真实目录中直接编辑配置文件(如 Codex 的 auth.json / config.toml),绕过 cc-switch 的写入。
关注上游修复:#6030 已提出在调用 create_dir_all 前先判断解析路径是否已存在目录的修复思路,待 cc-switch 发布包含该修复的版本后升级即可。
Affected Versions
Section titled “Affected Versions”Source Issues
Section titled “Source Issues”本页汇总自 3 个真实 issue
- 报错之后配置到底写没写进去?
- 有可能写进去了。#6107 报告报错后配置有时仍会写入成功,弹窗有误导性,建议打开实际配置文件确认后再重试。
- 为什么平时直接读写这个目录都正常,只有 cc-switch 切换时报错?
- 普通文件读写可以正常穿透 Junction,但 cc-switch 在写入前调用的 create_dir_all 对已存在的 Junction/重解析点会误判为『文件已存在』,所以只有切换动作会触发 os error 183。
- 我是为了省 C 盘空间才把目录迁到别的盘,必须删掉 Junction 吗?
- 目前 issue 中没有已发布修复版本的信息,删掉链接改回普通目录是最可靠的临时方案;也可以手动编辑真实目录下的配置文件绕过,或等待上游按 #6030 的思路修复。
这是一个非官方社区 wiki,与 cc-switch 作者及项目本身无隶属关系。内容整理自项目公开的 GitHub issues。本站不分发任何软件。