Microsoft OneDrive 允许文件存储在本地、远程或两种方式。这是由 Windows 10 中出现的新文件属性决定的:
FILE_ATTRIBUTE_PINNED 0x00080000
FILE_ATTRIBUTE_UNPINNED 0x00100000
FILE_ATTRIBUTE_RECALL_ON_OPEN 0x00040000
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x00400000
以及从以前版本的 Windows 继承的一些文件属性:
FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
FILE_ATTRIBUTE_OFFLINE 0x00001000
问题是我找不到通过 Win32 API 或 NT Native API 检索这些新文件属性的方法。到目前为止我已经尝试过:
GetFileAttributes()
FindFirstFile()
NtQueryAttributesFile()
对于设置为始终远程存储的 OneDrive 文件,所有这些方法都返回 0x00500020,而真正的属性为 0x00501620(REPARSE_POINT、SPARSE_FILE 和 OFFLINE 被屏蔽)。可以使用以下 PowerShell 命令检索真正的文件属性:
[Convert]::ToString( (Get-ItemProperty -Path 'C:\Users\username\OneDrive\test.txt').Attributes.Value__, 16 )
attrib.exe
system 命令还能够显示其中一些与 OneDrive 相关的新文件属性(O
用于脱机、U
用于未固定、P
用于固定)。
有没有办法在我的软件中检索这些文件属性?也许我需要在清单中添加一些东西?