Visual c++ fopen fwrite工作,但未创建任何文件

Visual c++ fopen fwrite工作,但未创建任何文件,visual-c++,fopen,Visual C++,Fopen,下面是我非常简单的程序。 如果我以来宾(不是管理员)身份运行,并且文件在执行时不存在,程序会告诉“OK”(也就是说,fopen和fwrite似乎可以工作),但test.bin不会被创建。 我希望fopen返回NULL,但它没有返回。如果该文件以前由管理员创建并且已经存在,它将正确返回NULL,但是如果没有任何文件,它将告诉OK,但该文件未创建。 Win 7专业版,MSVC 6.0 谢谢 托马索 如果您在系统上启用了UAC,并且您的应用程序没有清单,UAC虚拟化系统会将写操作重定向到某些受保护的位

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


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

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

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

#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;
}