我希望能够在 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(使用前将#替换为@)