终端里跑一条命令,屏幕回一行 file not found,或者 No such file or directory,第一反应往往是文件被删了。其实多数时候文件好端端躺在硬盘里,只是程序找的位置和你以为的位置不一样。

先确认它到底在不在。Linux 和 macOS 用 ls -l 文件路径,Windows 用 dir 文件路径;也可以在当前目录敲 pwd 看自己站在哪。路径敲错一个字母、少一层目录,报错都是同一句,不看具体路径根本猜不出来。

相对路径的基准是当前目录,不是脚本位置

写脚本的人最容易踩这个坑。Python 里写 open('data.csv'),找的是启动脚本时所在的那个目录,不是脚本文件所在的目录。在 IDE 里跑正常,双击运行就报错,原因就在这;稳妥的做法是用 __file__ 拼出脚本目录,再拼文件名。

大小写、扩展名、空格,三个细节

Linux 区分大小写,Data.csv 和 data.csv 是两个文件,代码从 Windows 挪到服务器就出事。Windows 默认隐藏已知扩展名,你以为文件叫 report,实际叫 report.txt,代码里再补一个后缀就成了 report.txt.txt。路径里有空格或中文,命令里要用引号包起来。

  • 先 pwd 确认当前目录
  • 再用 ls 或 dir 看文件是否存在
  • 最后检查大小写和扩展名

再往下才是权限和挂载的问题。Docker 里报找不到文件,先看 -v 挂载的宿主机路径对不对,容器里看到的是映射后的目录。数据库或服务报 file not found,还要看它的工作目录配置,很多服务默认在根目录找配置文件。

网页上的 file not found 是另一回事,那是服务器返回的 404,文件没上传、路由没配、大小写不对都可能。本地文件系统报错先看路径,线上 404 先看部署目录和 URL 重写规则,两边别混着查。

最后一个小习惯:报错时把完整路径打印出来,别只看文件名。Python 里用 os.path.abspath,Node 里用 path.resolve,打印一次就能看出是多了一层目录还是少了后缀,比对着代码猜快得多。