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!