【发布时间】:2012-04-30 16:31:06
【问题描述】:
我希望能够在 C++ 中隐藏/取消隐藏 Windows 中的文件,但我担心会擦除其他属性(如 FILE_ATTRIBUTE_READONLY、FILE_ATTRIBUTE_ARCHIVE、...)。
这是当前代码:
//Hiding the file
SetFileAttributes(path, FILE_ATTRIBUTE_HIDDEN);
// Un-Hiding the file
SetFileAttributes(path, FILE_ATTRIBUTE_NORMAL);
这对常规文件很有效,但隐藏文件是否会删除 READONLY 标志?取消隐藏文件会删除它吗?
如果是,我打算做这样的事情:
//Hiding the file
int attr = GetFileAttributes(path);
if ((attr | FILE_ATTRIBUTE_HIDDEN) == 0) {
SetFileAttributes(path, attr & FILE_ATTRIBUTE_HIDDEN);
}
//Unhiding the file
int attr = GetFileAttributes(path);
if ((attr | FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN) {
SetFileAttributes(path, attr & FILE_ATTRIBUTE_HIDDEN);
}
这行得通吗?
【问题讨论】:
-
一件小事:别忘了检查
GetFileAttributes返回值(检查它是否等于INVALID_FILE_ATTRIBUTES)。
标签: c++ windows winapi filesystems