【发布时间】:2011-06-30 05:39:26
【问题描述】:
我意识到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:\
ofstream 在 Windows 7 隐藏文件上是否失败,这是预期的行为吗?
【问题讨论】:
-
当您说您使用“以下链接器选项”时,您指的是这七个链接器选项中的哪一个?为什么您认为提及这一点很重要?虚拟商店真的与这个问题相关吗?
-
我更新了信息,以帮助您了解为什么拒绝 UAC 很重要。
-
您是否尝试在打开
ofstream之前关闭ifstream? -
我曾尝试在打开
ofstream之前明确关闭ifstream。它的行为仍然相同。 -
将文件写入 C 根目录以外的位置。UAC 对 C 根目录进行特殊处理。看看行为是否以更普通的方式持续存在。