先把这行贴出来,跟我那天看到的一模一样:
OSError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。
: '蓝海词-A级可争取.csv'
那天在整理一堆词表,最后一版重复的要删掉。回收站删、重命名、换个文件夹再删,全是这行。
那些词表都是 csv 导出来的,一份就好几十兆。csv 这类纯文本文件怎么压、怎么防乱码,我另外写过一篇 ——表格数据太大打不开和乱码的处理。跟今天这个不是一回事,但同在一条流水线上。
「另一个程序」这四个字把人往死里带。我查了任务管理器,查了杀毒软件的锁定列表,还专门把刚关掉的两个窗口又开了又关一遍 —— 一个都没找到可疑的进程。
真凶是我自己。那个一直开着的命令行窗口,它的当前目录就停在这个文件夹里。
就这一件事。
换成别的工具,全是死路
先说清楚一件事:这不是中病毒,也不是权限不够。
权限不足的报错是「拒绝访问」,5 号错。我这个是 32 号错,名字里就写着「另一个程序正在使用」。两个错长得完全不一样,别混。
那天我按着网上的思路试了一圈:
# 试回收站删除 —— 同样 32 号错
# 试改名 —— 也 32 号错,这一步最关键
# 试把文件挪到别的盘 —— 还是 32 号错
第三步是转折点。我把两个场景写成对照,同一个文件夹、同一个文件,只改一个条件:
# 场景一:命令行当前目录停在这个文件夹里
cd /c/Users/Administrator/Desktop/词表分析
ls -la # 文件在,看得见
rm -f 蓝海词-A级可争取.csv # 删不掉
cd /c/Users/Administrator/Desktop # 唯一的差别:先离开那个目录
rm -f 词表分析/蓝海词-A级可争取.csv # 同一个文件,这次删掉了
一个文件如果只是被你打开了,挪到别的盘是能挪走的 —— 它跟着你走。只有当某个进程的「当前目录」就停在这个文件夹里的时候,它才会被死死钉住,挪不动、改名不行、删不掉。
后来实在删不掉,我把它登记成了「重启后自动删除」。重启完确实没了,但那天我并不知道为什么。记录里写的是「根因疑点:命令行 cwd 会跨命令保持」—— 是疑点,不是结论。
隔了两天,我自己做了一组对比
这次我不想再靠猜,就在机器上跑了一遍。同一个文件夹,同样删两次,只改一个条件。
场景一,让命令行先切进这个目录,再删:
RENAME FAIL 32 另一个程序正在使用此文件,进程无法访问。
场景二,先切到别的目录,再删同一个文件夹:
RENAME OK
同一个文件夹,同一个 Python,同一段代码,就差「当前目录停在哪」这一件事。
我 10 月 6 号那天记的那个疑点,两天后自己复现出来了。当时只是觉得「会不会是 cwd」,这次是 A/B 对照出来的:一条命令,两个结果,中间没有别的变量。
有个细节我后来才注意到:删不掉的是文件夹和里面的文件,但文件夹里的东西没被占住。你去翻文件夹,能正常复制走、能正常打开。就是删不掉它自己。
怎么判断是不是这个原因
不用装什么工具。三个动作就能试出来。
第一,把命令行的当前目录切到别处,比如回到磁盘根:
cd /c/Users/Administrator/Desktop # 随便一个跟你要删的文件夹无关的地方
然后再删一次。成了,就是它。
第二,tasklist 挨个关看着眼熟的程序再试 —— 这条是网上都在教的,但我上次就是这么被带偏的,绕了一大圈。
第三,如果还不行,再去看权限。
顺序很重要。先切目录,三秒钟的事;再关进程,一分钟的事;权限是最后才该查的。我上次把顺序走反了,浪费的时间全花在关进程上。
三秒钟就能试出来的事,我花了一个小时。


那天真正卡住的是什么
说个更实在的:这个问题本身不难,难的是它给的信息全是假的。
「另一个程序正在使用」—— 这个「程序」是我自己开的窗口,但它没开任何文件,光开着就占住了。这个提示不提「当前目录」四个字,读者只能往「谁打开了这个文件」上想,而那个方向全是空的。
这也解释了另一件事:这类文件夹,就算你把整个 Windows 任务管理器翻一遍,也找不到该关谁。它不是一个进程持有文件,是进程的「所在位置」就是那个文件夹。
我那天最后是靠重启解决的。重启当然管用,但重启治不了「明天又踩一次」。真正该做的是删之前先 cd 到别的地方,一行的事。
顺便提醒一句:这类文件夹里的文件如果是脚本生成的,删之前最好先确认脚本还能跑得起来,不然下次又是空跑一遍。我在这上面吃过亏 —— 脚本里中文路径加相对路径老出问题,怎么排我记在中文路径那些坑里了。
回想起来,那天真正的麻烦不是删不掉,是我拿一个「疑点」当「结论」记了两个月,昨天想写文章才回头去验一遍。验完发现判断没错 —— 但如果这次没验,它就只是一句看起来很像回事的话。
这大概是我这几年最常犯的一类错:记录写得很笃定,其实当时只猜到了一半。