我意识到ofstream
在Windows 7隐藏文件中不起作用。
这是快速测试代码。
#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();
}
这是我得到的输出
ifstream open
ofstream not open!
如果我使用FILE_ATTRIBUTE_NORMAL
,ofstream
将成功打开。
我不以管理员身份运行程序。但是,我确实使用以下链接器选项。
如果我们不以管理员身份启动应用程序,则必须为启用用户帐户控制(UAC)启用否非常重要。操作系统将帮助我们将实际文件写入C:\Users\yccheok\AppData\Local\VirtualStore\a.txt
而不是受保护的C:\
{7}在Windows 7隐藏文件中失败,是预期的行为吗?
答案 0 :(得分:3)
是。如基础CreateFile
documentation中所述,“如果指定了CREATE_ALWAYS
和FILE_ATTRIBUTE_NORMAL
,则CreateFile
会失败并将最后一个错误设置为ERROR_ACCESS_DENIED
(如果文件存在且已有) FILE_ATTRIBUTE_HIDDEN
或FILE_ATTRIBUTE_SYSTEM
属性。“
或更具可读性:CreateFile
如果指定了CREATE_ALWAYS
和FILE_ATTRIBUTE_NORMAL
,并且文件具有FILE_ATTRIBUTE_HIDDEN
和/或FILE_ATTRIBUTE_SYSTEM
属性,则会失败。
恰好,ofstream
会像这样调用CreateFile
。