如何在 C# 中从 OneDrive 获取文件状态而不使用任何 API?

问题描述 投票:0回答:1

我正在开发 Windows 应用程序,以使用 c# 来识别此文件是云文件还是 OneDrive 本地文件。

OneDrive 具有三种类型的文件状态,例如(云、离线、在此设备上始终可用),如何通过代码获取 OneDrive 中每个文件的文件状态。

据我搜索,API需要用户的帐户才能登录Azure什么的,我们可以不使用API吗?

请推荐。

问候。

c# onedrive
1个回答
0
投票

是的,您可以通过检查文件的属性来检测未下载到本地 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 用于按需下载文件内容的驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.