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

C语言读取文本文件时报错无法打开文件问题求助

C语言fopen打开文件失败排查与修复方案

报错原因排查

触发Unable to open file.报错本质是fopen返回了空指针,常见原因有3类:

  • 路径不匹配:代码中使用的是相对路径"defoe-robinson-103.txt",程序运行时的工作目录下不存在该文件

    注意:C语言相对路径是相对于程序执行时的工作目录,而非源代码文件存放目录。如果用IDE运行代码,默认工作目录通常是项目根目录;如果用命令行运行,就是执行exe文件时所在的目录。

  • 文件名拼写错误:检查文件名的大小写、后缀、特殊字符是否和实际文件完全一致,比如实际文件是否为defoe-robinson-103.TXT、文件名前后有没有多余空格。
  • 权限/占用问题:当前系统用户没有该文件的读取权限,或者文件被其他程序锁定占用。

优化代码(增加具体错误提示)

把原代码的报错逻辑替换为perror可以直接打印系统给出的具体错误原因,同时修正了原代码打印会多输出空行的问题:

#include <stdio.h>
#include <string.h>

#define MAX 4000
int main(void)
{
    FILE *bkptr;
    char buffer[MAX];

    bkptr = fopen("defoe-robinson-103.txt", "r");
    // 文件打开失败
    if (bkptr == NULL) {
        perror("Unable to open file");
        return 1;
    }
    // 逐行读取文件到EOF
    while (fgets(buffer, MAX, bkptr)) {
        // 替换puts避免额外输出换行
        printf("%s", buffer);
    }

    fclose(bkptr);
    return 0;
}

快速验证方法

可以直接把文件路径替换为绝对路径测试:

  • Windows环境写法示例:"C:\\Users\\你的用户名\\Desktop\\defoe-robinson-103.txt"(注意路径里的反斜杠需要写两个转义)
  • Linux/macOS环境写法示例:"/home/你的用户名/Desktop/defoe-robinson-103.txt"

如果替换为绝对路径后可以正常读取,就可以确认是相对路径和工作目录不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:36:00