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

语法正确的fopen在Windows下无法运行,errno=2求助排查

解决fopen errno=2(ENOENT)的文件写入问题

errno=2对应ENOENT错误,意思是系统找不到指定的文件或目录,优先从路径、工作目录方向排查,以下是具体解决步骤:

  • 确认程序运行的当前工作目录
    VSCode终端的默认工作目录不一定是代码文件所在目录。运行程序前先在PowerShell里执行cd命令查看当前路径,程序里的相对路径"output.txt"是基于这个路径创建文件的。如果代码在子目录里,终端却在项目根目录,自然找不到要创建的文件位置。

  • 修正绝对路径格式
    Windows下使用绝对路径时,要么用双反斜杠转义(比如C:\\Users\\YourName\\Desktop\\output.txt),要么直接用正斜杠(C标准库支持正斜杠作为路径分隔符,比如C:/Users/YourName/Desktop/output.txt)。同时要确保路径里的每一级父目录都存在,fopen的"a"模式只会创建文件,不会自动创建不存在的目录。

  • 修复代码中的细节问题
    你的fwrite调用会写入字符串末尾的空字符\0,因为sizeof("hello")包含了这个终止符,应该用strlen("hello")获取有效字符长度,记得添加<string.h>头文件。另外可以优化错误提示,直接打印可读的错误描述,不用记错误码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    
    int main (int argc, char ** argv) {
        FILE * fp; 
        // 替换为你确认存在的目标路径,比如桌面绝对路径
        fp = fopen("output.txt", "a");  
        if (!fp )
        {
            fprintf(stderr, "创建文件失败: %s\n", strerror(errno));
            exit(1);
        }
        // 写入有效字符,避免多余的空字符
        fwrite("hello", sizeof(char), strlen("hello"), fp); 
        fclose(fp); 
        return 0; 
    }
    
  • 排查权限与杀毒软件干扰
    先手动在目标目录创建文件测试:PowerShell里执行"test" | Out-File output.txt,如果创建失败,说明目录没有写入权限,换一个有写入权限的目录(比如桌面)。另外可以临时关闭杀毒软件测试,部分杀毒软件会拦截程序的文件创建操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 17:40:03