无法以追加或写入模式打开文件

4
我有一个用 ANSI C 写的程序,遇到了问题。 当尝试以读模式打开名为 0.dat 的文件(文件指针称为 fp)时,我可以无问题地访问它。然后我使用 fclose(fp) 关闭 fp。当再次尝试使用 fopen 以写或追加模式打开 fp 时,它会使用 perror 给出“权限被拒绝”的错误。 我不知道为什么,我尝试先使用 a+ 打开,但仍然出现了权限错误。
我在 Windows 10 上运行 Visual Studio 2015。 尝试重置 Visual Studio,但仍然无法解决问题。 以下是一个最小化的示例:
    #include <stdio.h>

int main(void) {
    FILE *fp = NULL;
    if ((fp = fopen("1.txt", "w")) == NULL) { perror("error"); exit(1); }
    fprintf(fp, "You smell");
    return 0;
}

输出:错误:权限被拒绝。

1
请修改您的问题,并提供最小可重现示例(MCVE)。 - user694733
我刚刚完成了,谢谢。 - absentio
3个回答

1

检查您的代码中想要用写入选项打开的文件的写入权限。 if ((fp = fopen("1.txt", "w")) == NULL) “1.txt”文件必须具有写入权限。


1
使用fopen打开文件时,以w或a+模式打开会提示“权限被拒绝”。我不明白为什么,我先尝试以a+方式打开,但仍然提示权限错误。
运行程序的用户似乎没有该文件的写入权限。要成功以写入和/或追加模式打开文件,运行程序的用户需要具有对其的写入权限。
要解决您面临的问题,
要么调整访问权限,
要么在已被授予文件写入权限的用户下运行程序。

1
你好@alk,我的账户是管理员,这意味着我应该有权限在Windows中访问我的“文档”文件夹,这也是项目所在的文件夹。 - absentio
@absentio:Windows 的文件锁定机制很特殊,也许另一个进程已经以独占写入的方式打开了该文件? - alk
1
我不这么认为。如果我没记错的话,“w”应该在文件不存在时创建一个文件。但是在这里,fopen并没有创建任何东西。也许我应该只安装Ubuntu,和Windows说再见了? - absentio

0
也许禁用防病毒软件会解决问题。我之前也遇到了同样的问题,直到我禁用了我的防病毒软件(Avast)。

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接