如何从WPF应用程序打开OneDrive文件

本文关键字:OneDrive 文件 应用程序 WPF | 更新日期: 2023-09-27 18:29:31

当我尝试从WPF应用程序打开OneDrive文件路径时,我在使用File.ReadAllText(filename);:时收到以下错误

The file cannot be accessed by the system.

尽管试图明确检查读取权限:

private static bool HasReadPermissions(string filename)
{
    FileSystemSecurity security = File.GetAccessControl(filename);
    var rules = security.GetAccessRules(true, true, typeof(NTAccount));
    var currentUser = new WindowsPrincipal(WindowsIdentity.GetCurrent());
    foreach (FileSystemAccessRule rule in rules)
    {
        if (!currentUser.IsInRole(rule.IdentityReference.Value) || (rule.FileSystemRights & (FileSystemRights.ReadData | FileSystemRights.Read)) == 0)
        {
            continue;
        }
        if (rule.AccessControlType == AccessControlType.Deny)
        {
            return false;
        }
        if (rule.AccessControlType == AccessControlType.Allow)
        {
            return true;
        }
    }
    return false;
}

有没有任何方法可以检查OneDrive权限,检测文件是否是OneDrive文件,或者在WPF应用程序中实际打开OneDrive文件?我认为这个文件只在网上提供可能是问题所在;有没有一种方法可以检测WPF或Windows桌面应用程序中的仅在线文件?

如何从WPF应用程序打开OneDrive文件

这个问题比较老,所以这个答案主要针对通过搜索找到它的读者。

你可以判断一个文件是否是桌面应用程序中仅在线的OneDrive文件。只需检查文件属性,如果附加了脱机属性,则该文件将仅联机OneDrive文件。以下是示例方法:

public static bool IsFileAvailable(string filePath)
{
    if (!File.Exists(filePath))
        return false;
    var attributes = File.GetAttributes(filePath);
    Debug.WriteLine(attributes);
    // Available online-only: Hidden, System, Archive, SparseFile, ReparsePoint, Offline
    // Available offline: Archive
    return !attributes.HasFlag(FileAttributes.Offline);
}

脱机属性并不直接表示该文件是仅联机的OneDrive文件,但该文件的数据不是立即可用的,我认为这是您想要知道的。