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

VS Code中C语言调用fopen()创建文件遇权限拒绝的解决办法

解决Win10下C代码fopen创建文件权限拒绝问题

排查方向与解决方案

1. 检查目标文件是否被占用

  • 如果second.wav已存在,可能被播放器、资源管理器预览等程序锁定,导致无法写入。先手动删除该文件,或关闭所有可能占用它的程序后再运行代码。

2. 切换到非系统保护目录写入

桌面属于系统用户目录,可能受UAC或Windows Defender限制。可以指定其他非系统目录保存文件,比如自己创建的本地文件夹:

// 替换原fopen语句为指定路径,注意双反斜杠转义
FILE *second = fopen("D:\\My_C_Code\\Output\\second.wav", "w");

也可以用正斜杠简化路径:"D:/My_C_Code/Output/second.wav"

3. 调整目录与程序权限

  • 右键VS Code快捷方式→属性→兼容性,勾选以管理员身份运行此程序,同时点击更改所有用户的设置,确保所有用户运行时都用管理员权限。
  • 检查桌面目录权限:右键桌面空白处→属性→安全→编辑,选中当前用户,确认写入、修改权限已勾选,未勾选则点击允许后保存。

4. 临时关闭Windows Defender实时保护测试

部分情况下,Defender的实时保护会拦截程序写入用户目录。可临时关闭(设置→更新和安全→Windows安全中心→病毒和威胁防护→管理设置→实时保护),测试能否创建文件。若可行,将VS Code编译输出路径添加到Defender排除项即可。

优化后的测试代码

#include <stdio.h>
#include <errno.h>
#include <direct.h>

int main() {
    // 打印当前工作目录,再次确认路径
    char cwd[1024];
    if (_getcwd(cwd, sizeof(cwd)) != NULL) {
        printf("当前工作目录: %s\n", cwd);
    } else {
        perror("_getcwd 获取目录失败");
        return 1;
    }

    FILE *first = fopen("first.wav", "r");  
    if (first == NULL)
    {
        perror ("打开first.wav出错"); 
        printf( "errno1: %d\n", errno );
        printf("无法打开文件。\n");
        return 1;
    }
    printf("成功打开first.wav\n");
    fclose(first); // 及时关闭文件,避免资源泄漏

    FILE *second = fopen("second.wav", "w");  
    if (second == NULL)
    {
        perror ("创建second.wav出错");
        printf( "errno2: %d\n", errno );
        printf("无法创建文件。\n");
        return 1;
    }
    printf("成功创建second.wav\n");
    fclose(second);

    return 0;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 19:05:24