C 如何在windows上使用GetFileAttributes()检查某个文件是否为文件
我想在windows上使用GetFileAttributes()函数测试文件系统对象是否为文件,这似乎并不容易,因为似乎没有一个标志告诉我“这是一个文件”。所以我现在做的是这样的:C 如何在windows上使用GetFileAttributes()检查某个文件是否为文件,c,windows,winapi,C,Windows,Winapi,我想在windows上使用GetFileAttributes()函数测试文件系统对象是否为文件,这似乎并不容易,因为似乎没有一个标志告诉我“这是一个文件”。所以我现在做的是这样的: int is_file = 0; DWORD attr = GetFileAttributes(path); if (attr != 0xFFFFFFFF) { DWORD DontWantAttrs = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_DEVICE | FIL
int is_file = 0;
DWORD attr = GetFileAttributes(path);
if (attr != 0xFFFFFFFF) {
DWORD DontWantAttrs = FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_DEVICE | FILE_ATTRIBUTE_OFFLINE | FILE_ATTRIBUTE_REPARSE_POINT | 0xFFFFC000;
is_file = ( attr & DontWantAttrs ) == 0;
}
到目前为止,这似乎为我的测试提供了正确的结果,但我不确定这是否完全正确,也就是说,它是否会为所有文件返回true,而为所有非文件返回false。为什么不接受
file\u ATTRIBUTE\u OFFLINE
?我需要可用的文件数据,所以,在这种情况下,让它离线对我没有帮助。然而,在更一般的情况下,我同意它应该被接受。它可以是指向文件或目录的指针,也可以是文件符号链接。您想将此视为文件,还是要检查它指向的是什么?如果所请求的路径不包括“代码”> FielyAtditTyCudio<<代码>标志,而不是定义,则它必须是一个文件,因此检查其他标志没有意义。但是,如果存在FILE\u ATTRIBUTE\u repasse\u POINT
,则路径是链接本身,而不是链接到的文件/目录FILE\u ATTRIBUTE\u DIRECTORY
仍会告诉您链接是针对目录还是针对文件。如果要检查链接文件是否存在,必须使用CreateFile()
.FYI打开链接,0xFFFFC000
是file\u ATTRIBUTE\u ENCRYPTED | file\u ATTRIBUTE\u INTEGRITY\u STREAM | file\u ATTRIBUTE\u VIRTUAL | file\u ATTRIBUTE\u NO\u SCRUB\u DATA | 0xFFFC0000
(0xFFFC0000
此时不包括任何已定义的属性,但将来可能会更改)。