C语言fopen函数在指定目录创建/读取文件失败的问题咨询
C语言fopen函数在指定目录创建/读取文件失败的问题咨询
Hi Ramon,我来帮你拆解下这个问题的原因和解决办法~
问题根源分析
你遇到的情况主要是两个常见误区导致的:
- 相对路径的基准搞错了:你写的
"project/files/test.txt"是从程序运行时的当前工作目录出发的相对路径。假设你是在project目录下编译并运行程序的,那当前工作目录就是project,这时候这个路径相当于要找project/project/files/test.txt——显然这个路径根本不存在,自然创建失败。而"test.txt"是直接在当前工作目录(也就是project)下创建文件,所以能成功。 - 目标文件夹是否存在:就算你写对了路径,比如
"files/test.txt",如果files文件夹本身还没创建,fopen是没办法自动帮你生成文件夹的,它只能创建文件,这时候也会失败。
具体解决办法
- 用正确的相对路径:如果程序是在
project目录下运行的,直接用"files/test.txt"作为路径即可:FILE *file; file = fopen("files/test.txt", "w"); - 确保目标目录存在:可以先手动创建
files文件夹,或者在程序里用mkdir函数自动创建(需要引入对应头文件):#include <sys/stat.h> #include <sys/types.h> // 创建files目录,权限可根据需求调整 mkdir("files", 0777); FILE *file = fopen("files/test.txt", "w"); - 使用绝对路径兜底:如果不确定当前工作目录,直接写文件的绝对路径就不会出错了,比如Linux下的
"/home/xxx/project/files/test.txt",或者Windows下的"C:\\project\\files\\test.txt"。
备注:内容来源于stack exchange,提问作者Ramon Jales
相关产品推荐
相关产品推荐

