我意识到这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();
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的输出
ifstream open
ofstream not open!
Run Code Online (Sandbox Code Playgroud)
如果我使用FILE_ATTRIBUTE_NORMAL,ofstream将成功打开.
我不以管理员身份运行该程序.但是,我确实使用以下链接器选项.

说完就转不用于启用用户帐户控制(UAC)是很重要的,如果我们不启动应用程序作为管理员.操作系统将帮助我们将实际文件写入C:\Users\yccheok\AppData\Local\VirtualStore\a.txt而不是受保护C:\
是否ofstream在Windows 7无法隐藏的文件,是预期的行为?
是的。正如底层CreateFile文档中所述,“如果指定了CREATE_ALWAYS和,则失败,并将最后一个错误设置为文件存在且具有or属性。”FILE_ATTRIBUTE_NORMALCreateFileERROR_ACCESS_DENIEDFILE_ATTRIBUTE_HIDDENFILE_ATTRIBUTE_SYSTEM
或者更具可读性:CreateFile如果同时指定了CREATE_ALWAYS和FILE_ATTRIBUTE_NORMAL,并且文件具有FILE_ATTRIBUTE_HIDDENand/orFILE_ATTRIBUTE_SYSTEM属性,则失败。
恰巧有这样的ofstream调用。CreateFile
| 归档时间: |
|
| 查看次数: |
2285 次 |
| 最近记录: |