从Windows 10 Fall Creators Update(版本16299.15)和OneDrive版本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 \使用OneDrive.pdf和#34开始;)是否为在线文件?
答案 0 :(得分:3)
要检查“仅限在线”,您只需拨打GetFileAttributes()
并查看FILE_ATTRIBUTE_OFFLINE
属性是否已设置。
事实上,这对于OneDrive来说并不新鲜,该属性已经存在了很长时间。
通过shell可以使用其他OneDrive属性(尽管您需要的属性是PKEY_StorageProviderState
而不是PKEY_FilePlaceholderStatus
),但“仅限在线”很容易检查。
编辑:Windows 10的另一个文件系统属性FILE_ATTRIBUTE_PINNED
是新的,并且OneDrive使用它来指示“始终可用”的文件。
修改:截至2019年,OneDrive现在似乎使用FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS
而不是FILE_ATTRIBUTE_OFFLINE
,如下所示。
答案 1 :(得分:1)
查看文件的PKEY_FilePlaceholderStatus
属性(at the shell level,而不是文件系统级别)。 This blog post有一个可以测试的示例程序。 This question还暗示了一些您可能想要查看的未记录的属性。
Microsoft有一个UWP example on MSDN。
答案 2 :(得分:0)
多年之后,我仍然使用here描述的FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS
属性来确定文件或目录在本地是否完全存在。
Microsoft文档对FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS
说以下内容:
设置此属性后,意味着该文件或目录在本地不完整。对于文件来说,这意味着并非其所有数据都位于本地存储中(例如,稀疏,而某些数据仍位于远程存储中)。对于目录,这意味着某些目录内容正在从另一个位置虚拟化。读取文件/枚举目录将比普通方法贵,例如它将导致至少某些文件/目录内容从远程存储中获取。只有内核模式调用者才能设置此位。
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS
有一些优点:
正如this answer中所述,仍有一些有趣的未记录属性可以提供有关云文件的其他信息。
注意:我不接受乔纳森·波特的回答,因为我在评论中提到了FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS属性,并且比他更新答案的早一年开始使用它。