我意识到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
将会成功打开。
我不以管理员身份运行该程序。但是,我确实使用了以下链接器选项。
不得不转弯No for 启用用户帐户控制 (UAC)如果我们不以管理员身份启动应用程序,这一点很重要。操作系统会帮助我们将实际的文件写入C:\Users\yccheok\AppData\Local\VirtualStore\a.txt
而不是受保护C:\
Does ofstream
Windows 7 隐藏文件失败,这是预期的行为吗?
是的。正如底层中所指出的CreateFile文档 http://msdn.microsoft.com/en-us/library/aa363858.aspx, " If CREATE_ALWAYS
and FILE_ATTRIBUTE_NORMAL
被指定,CreateFile
失败并将最后一个错误设置为ERROR_ACCESS_DENIED
如果文件存在并且具有FILE_ATTRIBUTE_HIDDEN
or FILE_ATTRIBUTE_SYSTEM
属性。”
或者更具可读性:CreateFile
如果两者都失败CREATE_ALWAYS
and FILE_ATTRIBUTE_NORMAL
已指定,并且如果文件具有FILE_ATTRIBUTE_HIDDEN
and/or FILE_ATTRIBUTE_SYSTEM
属性。
正好ofstream
calls CreateFile
像这样。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)