我正在开发 Windows 应用程序,以使用 c# 来识别此文件是云文件还是 OneDrive 本地文件。
OneDrive 具有三种类型的文件状态,例如(云、离线、在此设备上始终可用),如何通过代码获取 OneDrive 中每个文件的文件状态。
据我搜索,API需要用户的帐户才能登录Azure什么的,我们可以不使用API吗?
请推荐。
问候。
是的,您可以通过检查文件的属性来检测未下载到本地 OneDrive 文件夹的文件。 OneDrive 使用一个标志来指示该文件只是一个占位符。不幸的是,特定的标志不是
FileAttributes
中列举的标志之一,因此您必须单独测试它。
对 OneDrive 占位符文件的快速而肮脏的测试如下所示:
static bool IsPlaceholder(string filename)
{
FileInfo info = new(filename);
return info.Exists && (((int)info.Attributes) & 0x00400000) != 0;
}
较长的版本是 dotnet 不支持一些 NTFS 文件属性。从这个列表你会发现我们感兴趣的那个叫做
FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS (0x00400000)
。这通常仅由内核级驱动程序设置,例如 OneDrive 用于按需下载文件内容的驱动程序。