首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何隐藏/取消隐藏文件而不删除C++中的其他属性

如何隐藏/取消隐藏文件而不删除C++中的其他属性
EN

Stack Overflow用户
提问于 2012-05-01 00:31:07
回答 2查看 5.4K关注 0票数 3

我希望能够在C++中隐藏/取消隐藏文件,但我担心擦除其他属性(如FILE_ATTRIBUTE_READONLY、FILE_ATTRIBUTE_ARCHIVE等)。

下面是当前的代码:

代码语言:javascript
运行
复制
//Hiding the file
SetFileAttributes(path, FILE_ATTRIBUTE_HIDDEN);

// Un-Hiding the file
SetFileAttributes(path, FILE_ATTRIBUTE_NORMAL);

这对常规文件很有效,但是隐藏文件会删除READONLY标志吗?隐藏文件会将其移除吗?

如果是这样的话,我正计划这样做:

代码语言:javascript
运行
复制
//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);
}

这样行得通吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-01 01:05:58

这个测试不会起作用,它永远是假的:

代码语言:javascript
运行
复制
if ((attr | FILE_ATTRIBUTE_HIDDEN) == 0)

相反,它应该说

代码语言:javascript
运行
复制
if ((attr & FILE_ATTRIBUTE_HIDDEN) == 0)

同样,要测试文件是否已隐藏,请执行以下操作:

代码语言:javascript
运行
复制
if ((attr & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN)

最终更正的代码:

代码语言:javascript
运行
复制
//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);
}
票数 9
EN

Stack Overflow用户

发布于 2012-05-01 00:38:12

是的,第一个代码将删除所有其他属性。

第二个代码几乎是正确的,但是您遗漏了~符号:

代码语言:javascript
运行
复制
// 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);

// Is it currently visible?
if ((attr & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN) {
    SetFileAttributes(path, attr & ~FILE_ATTRIBUTE_HIDDEN);
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10387145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档