fopen fwrite工作但没有创建文件

时间:2015-03-20 22:09:41

标签: visual-c++ fopen

下面的

是我非常简单的程序。 如果我作为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;
}

1 个答案:

答案 0 :(得分:0)

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

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

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