You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

无需OneDrive API判断文件状态的解决方案

完全可以不依赖OneDrive API或Azure账号,通过读取Windows系统的文件属性或Shell扩展属性来判断OneDrive文件的云端/离线/始终本地状态,以下是两种可靠方案:

方案1:基础文件属性判断(轻量无依赖)

OneDrive会给不同状态的文件添加系统属性标记,结合File.GetAttributes()和文件大小可以快速判断:

  • 始终在本地可用:文件FileAttributes不含Offline标志,且本地文件大小与云端实际大小一致(本地存储完整副本)
  • 已下载的离线文件:FileAttributes不含Offline标志,是已完成下载的OneDrive占位符文件
  • 云端占位符文件:FileAttributes包含Offline标志,且文件实际体积很小(通常仅几KB,仅为占位符)

代码示例:

using System.IO;

public static string GetOneDriveFileState(string filePath)
{
    if (!File.Exists(filePath))
        return "文件不存在";

    var fileAttrs = File.GetAttributes(filePath);
    var fileInfo = new FileInfo(filePath);

    // 判断云端占位符
    if ((fileAttrs & FileAttributes.Offline) != 0 && fileInfo.Length < 10 * 1024)
        return "云端文件(仅占位符)";

    // 判断已下载/始终本地
    if ((fileAttrs & FileAttributes.Offline) == 0 && filePath.Contains(@"OneDrive"))
        return "始终在本地可用/已下载离线文件";

    return "非OneDrive文件或未知状态";
}

方案2:读取Shell属性(精准判断)

OneDrive将文件状态存储在Windows Shell的System.FileAvailabilityStatus属性中,通过该属性可以精准区分三种状态,结果更可靠:

实现方式(使用Windows API Code Pack)

  1. 安装NuGet包Microsoft.WindowsAPICodePack-Shell
  2. 通过ShellFile读取目标属性

代码示例:

using Microsoft.WindowsAPICodePack.Shell;
using Microsoft.WindowsAPICodePack.Shell.PropertySystem;

public static string GetOneDriveFileState(string filePath)
{
    if (!File.Exists(filePath))
        return "文件不存在";

    using var shellFile = ShellFile.FromFilePath(filePath);
    var statusProp = shellFile.Properties.GetProperty("System.FileAvailabilityStatus");
    
    if (statusProp?.Value == null)
        return "非OneDrive文件";

    return (int)statusProp.Value switch
    {
        0 => "始终在本地可用",
        1 => "离线文件(已下载,可脱机访问)",
        2 => "云端文件(仅占位符,需联网下载)",
        _ => "未知状态"
    };
}

无NuGet依赖替代方案

若不想引入第三方库,可以通过P/Invoke调用原生Windows API SHGetPropertyStoreFromParsingName获取属性存储,再读取System.FileAvailabilityStatus属性,核心逻辑与上述一致,只是需要手动处理COM交互。

内容的提问来源于stack exchange,提问作者user23329034

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:47:21