如何检测 OneDrive 仅联机文件

Rom*_*098 5 winapi onedrive

从 Windows 10 Fall Creators Update(版本 16299.15)和 OneDrive build 17.3.7064.1005 开始,用户可以使用按需文件(https://support.office.com/en-us/article/learn-about-onedrive-files -on-demand-0e6860d3-d9f3-4971-b321-7092438fb38e )

现在,任何 OneDrive 文件都可以具有以下类型之一:仅在线、本地可用和始终可用。

使用 WinAPI 我如何知道该文件(例如“C:\Users\Username\OneDrive\Getting started with OneDrive.pdf”)是仅在线文件?

Rom*_*098 5

多年后,我仍然使用此处FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS描述的属性来确定文件或目录是否完全存在于本地。

Microsoft 文档对 进行了以下说明FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS

当设置此属性时,意味着该文件或目录在本地不完全存在。对于文件来说,这意味着并非其所有数据都位于本地存储上(例如,它可能是稀疏的,某些数据仍在远程存储中)。对于目录来说,这意味着某些目录内容正在从另一个位置虚拟化。读取文件/枚举目录将比正常情况更昂贵,例如,它将导致从远程存储中获取至少一些文件/目录内容。只有内核模式调用者可以设置该位。

有一些优点FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS

  1. 它可用于文件和目录。
  2. 它只能在内核模式下设置,因此任何人都没有机会任意设置该属性。

如此答案中所述,仍然有一些有趣的未记录属性可以提供有关云文件的附加信息。

注意:我没有接受 Jonathan Potter 的答案,因为我在评论中提到了 FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 属性,并在他更新答案的一年前开始使用它。