【问题标题】:fopen fwrite work but no file is createdfopen fwrite 工作,但没有创建文件
【发布时间】:2015-05-24 10:53:53
【问题描述】:

下面是我非常简单的程序。 如果我以访客(不是管理员)身份运行并且文件在执行时不存在,程序会告诉“OK”(也就是说,fopen 和 fwrite 似乎可以工作)但不会创建 test.bin。 我希望 fopen 返回 NULL 但它没有。如果文件以前由管理员创建并且已经存在,它会正确返回 NULL,但是,如果没有任何文件,它会告诉 OK 但文件没有创建。 赢 7 专业版,MSVC 6.0 谢谢 托马索

#include "stdafx.h"
#include "stdio.h"
#include "conio.h"


int main(int argc, char* argv[])
{
    FILE *fp;
    fp=fopen("c:\\test.bin","w+b");

    if (fp==NULL) printf("Fopen returned NULL\n");
    else
    {
        if (fwrite("HELLO",5,1,fp)!=1) printf("Fwrite failed\n");
        else printf("OK\n");
    }
    if (fp) fclose(fp);
    getch();
    return 0;
}

【问题讨论】:

    标签: visual-c++ fopen


    【解决方案1】:

    如果您在系统上启用了 UAC 并且您的应用程序没有清单,则 UAC 虚拟化系统会将写入重定向到某些受保护的位置。

    这是为了向后兼容 - 现在拒绝系统根的写入权限,但虚拟化系统意味着旧软件可以继续工作,而不仅仅是彻底失败。

    如果您将清单添加到您的应用程序,那么它将被视为 UAC 感知,并且虚拟化将被禁用。否则,您可能会在C:\Users\<username>\AppData\Local\VirtualStore 下找到您的文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      相关资源
      最近更新 更多