如何在 Windows 上的 C++ 中隐藏/取消隐藏文件而不擦除其他属性

2023-12-10

我希望能够在 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);
}

那行得通吗?


这个测试不会起作用,它总是错误的:

if ((attr | FILE_ATTRIBUTE_HIDDEN) == 0)

它应该说

if ((attr & FILE_ATTRIBUTE_HIDDEN) == 0)

同样,要测试文件是否已隐藏:

if ((attr & FILE_ATTRIBUTE_HIDDEN) == FILE_ATTRIBUTE_HIDDEN)

最终更正后的代码:

//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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Windows 上的 C++ 中隐藏/取消隐藏文件而不擦除其他属性 的相关文章

随机推荐