我有一个名为myhj.txt
的文件,我从cmd attrib +h +s +r myhj.txt
使用此命令隐藏了该文件。现在我无法在C中使用标准fopen()
函数打开文件,因此我决定使用不返回错误的GetFileAttributes()
函数。根据{{3}},当函数成功时,返回值为MSDN
当程序尝试在下面运行printf()
时,我不知道如何获取它们的值。当文件被隐藏时它也会稳定工作吗?如何使用其所有值访问隐藏文件?
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
FILE *log;
int main(int argc, char *argv[]) {
if(GetFileAttributes("myhj.txt") == INVALID_FILE_ATTRIBUTES){
printf("invalid get last error %d", GetLastError());
}else{
printf("%s", FILE_ATTRIBUTE_DIRECTORY);
}
}
答案 0 :(得分:5)
崩溃是因为%s
期望以空字符结尾的字符串,但FILE_ATTRIBUTE_*
常量是整数,所以最终尝试从无效的内存地址读取字符串。请改用%d
:
printf("%d", FILE_ATTRIBUTE_DIRECTORY);
GetFileAttributes()
返回DWORD
,unsigned int
,因此请使用%u
:
DWORD att = GetFileAttributes("myhj.txt");
if (att == INVALID_FILE_ATTRIBUTES) {
printf("invalid get last error %d", GetLastError());
}
else {
printf("%u", att);
}
要检查特定值,请使用按位AND运算符(&
)分别测试每个位:
DWORD att = GetFileAttributes("file.ext");
if (att == INVALID_FILE_ATTRIBUTES) {
printf("error!\n");
}
else
{
if (att & FILE_ATTRIBUTE_DIRECTORY) printf("directory\n");
if (att & FILE_ATTRIBUTE_HIDDEN) printf("hidden\n");
...
}
如果您在文件上设置只读属性,则无法对其执行破坏性操作...