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
相关产品推荐
相关产品推荐

