Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何在windows上使用GetFileAttributes()检查某个文件是否为文件_C_Windows_Winapi - Fatal编程技术网

C 如何在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

我想在windows上使用GetFileAttributes()函数测试文件系统对象是否为文件,这似乎并不容易,因为似乎没有一个标志告诉我“这是一个文件”。所以我现在做的是这样的:

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
此时不包括任何已定义的属性,但将来可能会更改)。