我希望能够在C++中隐藏/取消隐藏文件,但我担心擦除其他属性(如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);
}这样行得通吗?
发布于 2012-05-01 01:05:58
这个测试不会起作用,它永远是假的:
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);
}发布于 2012-05-01 00:38:12
是的,第一个代码将删除所有其他属性。
第二个代码几乎是正确的,但是您遗漏了~符号:
// 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);
}https://stackoverflow.com/questions/10387145
复制相似问题