是我非常简单的程序。 如果我作为guest(不是管理员)运行并且文件在执行时不存在,程序会显示“OK”(即fopen和fwrite似乎工作),但是没有创建test.bin。 我期望fopen返回NULL但它没有。如果文件先前由管理员创建并且已经存在,则它正确返回NULL但是,如果没有任何文件,则它会告诉OK,但不会创建该文件。 Win 7 Professional,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;
}
答案 0 :(得分:0)
如果您的系统上启用了UAC且您的应用程序没有清单,则UAC虚拟化系统会将写入重定向到某些受保护的位置。
这是为了向后兼容 - 现在拒绝系统root的写入权限,但虚拟化系统意味着旧软件可以继续工作而不是直接失败。
如果您向应用程序添加清单,那么它将被视为UAC感知并且将禁用虚拟化。否则,您可能会在C:\Users\<username>\AppData\Local\VirtualStore
下找到您的文件。