Windows上无法读取的文件属性
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Windows上无法读取的文件属性相关的知识,希望对你有一定的参考价值。
考虑以下代码片段
#include <iostream>
#include <windows.h>
int main()
{
WIN32_FILE_ATTRIBUTE_DATA wfad;
GetFileAttributesEx(("C:\TEMP\noreadfile"), GetFileExInfoStandard, &wfad); //"noreadfile" is unreadable file
std::cout << wfad.dwFileAttributes; // 128
return 0;
}
对于Windows上无法读取的文件(没有读取权限的文件或其属性 - >安全选项卡中的读取权限设置为“拒绝”的文件),GetFileAttributesEx
返回FILE_ATTRIBUTE_NORMAL
,这意味着该文件的no other attribute is set。
对于可写文件和非可读文件,也会返回此属性。
我们使用此信息在产品代码中设置文件的权限。
我们得出结论,GetFileAttributesEx
可能会在不可读文件的情况下返回错误的属性。我们想知道我们的结论是否正确。
如果是,那么这是GetFileAttributesEx
的已知问题吗?
如果没有那么
使用Windows API获取文件属性(文件权限可能?)的正确方法是什么?或者如果可能,使用Boost或标准C ++文件系统库?
它可能根本没有成功。如果你看一下documentation for GetFileAttributesEx,它实际上会返回一个BOOL。
返回值如果函数成功,则返回值为非零值。
如果函数失败,则返回值为零(0)。要获取扩展错误信息,请调用GetLastError。
我的猜测是,如果呼叫失败,“fwad”是未定义的。尝试检查故障指示的返回值。我的猜测是GetLastError将返回类似ERROR_ACCESS_DENIED的内容。
Windows API不会抛出异常,所以很遗憾,您必须检查几乎每个返回值。
以上是关于Windows上无法读取的文件属性的主要内容,如果未能解决你的问题,请参考以下文章
“未捕获的类型错误:无法在 Websocket Angular JS 上读取未定义的属性‘延迟’”
jqGrid filterToolbar():无法读取未定义的属性“length”
TypeError:无法从null读取属性“getDataRange”。 (第3行,文件“代码”)