C++ 流不';无法在Windows 7隐藏文件上工作

C++ 流不';无法在Windows 7隐藏文件上工作,c++,windows-7,C++,Windows 7,我意识到流的在Windows7隐藏文件上不起作用 下面是快速测试代码 #include <fstream> #include <iostream> #include <tchar.h> #include <windows.h> int main() { { std::ifstream file2(_T("c:\\a.txt")); if (file2.is_open()) {

我意识到流的
在Windows7隐藏文件上不起作用

下面是快速测试代码

#include <fstream>
#include <iostream>
#include <tchar.h>
#include <windows.h>

int main() {    
    {
        std::ifstream file2(_T("c:\\a.txt"));
        if (file2.is_open()) {
            std::cout << "ifstream open" << std::endl;
        } else {
            std::cout << "ifstream not open!" << std::endl;
        }
    }

    // SetFileAttributes(_T("c:\\a.txt"), FILE_ATTRIBUTE_NORMAL);
    SetFileAttributes(_T("c:\\a.txt"), FILE_ATTRIBUTE_HIDDEN);

    {
        std::ofstream file(_T("c:\\a.txt"));
        if (file.is_open()) {
            std::cout << "ofstream open" << std::endl;
        } else {
            std::cout << "ofstream not open!" << std::endl;
        }
    }
    getchar();
}
如果我使用的是
FILE\u ATTRIBUTE\u NORMAL
,将成功打开流的

我不以管理员身份运行该程序。但是,我确实使用以下链接器选项

如果我们不是以管理员身份启动应用程序,则必须为启用用户帐户控制(UAC)启用No非常重要。操作系统将帮助我们将实际文件写入
C:\Users\yccheok\AppData\Local\VirtualStore\a.txt,而不是受保护的
C:\


是否在Windows 7隐藏文件上流的
失败,这是预期的行为?

是。如基础文档中所述,“如果指定了
CREATE\u ALWAYS
FILE\u ATTRIBUTE\u NORMAL
CreateFile
失败,并将最后一个错误设置为
error\u ACCESS\u DENIED
,如果文件存在并且隐藏了
FILE\u ATTRIBUTE\u
FILE\u ATTRIBUTE\u SYSTEM
属性。”

或者更可读:
CreateFile
如果指定了
CREATE\u ALWAYS
FILE\u ATTRIBUTE\u NORMAL
,并且如果文件具有
FILE\u ATTRIBUTE\u HIDDEN
和/或
FILE\u ATTRIBUTE\u SYSTEM
属性,则
CreateFile\u
失败


恰好流的
调用
CreateFile
时是这样的。

当你说你使用“下面的链接器选项”时,你指的是这七个链接器选项中的哪一个,为什么你认为这很重要?虚拟商店实际上与这个问题有关吗?我更新了信息,以帮助您理解为什么对UAC拒绝很重要。在打开
of stream
之前,您是否尝试过关闭
ifstream
?在打开
of stream
之前,我尝试过显式关闭
ifstream
。它的行为还是一样的。把你的文件写在C的根以外的地方。UAC特别对待C的根。查看该行为是否在更普通的路径中持续。但是,您上面提到的文档是为“Windows Server 2003和Windows XP/2000”指定的。但我只在Windows7中遇到这个问题。我在Windows XP中没有遇到这样的问题。我以为问题只出现在Windows 7中。我做进一步的测试。似乎在Windows XP中也是如此。
ifstream open
ofstream not open!