Как открыть файлы OneDrive из приложения WPF

1

Когда я пытаюсь открыть пути к файлу OneDrive из приложения WPF, я получаю следующую ошибку при использовании 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 или фактически открывать файлы OneDrive в приложении WPF? Я думаю, что проблема в том, что этот файл доступен онлайн - только может быть проблема; есть ли способ обнаруживать только онлайн файлы в WPF или настольных приложениях Windows?

Теги:
wpf
file-io
onedrive

1 ответ

0

Этот вопрос относительно старый, поэтому этот ответ в основном предназначен для читателей, которые находят его путем поиска.

Вы можете определить, является ли файл файлом 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 в режиме онлайн, но данные файла не доступны сразу, и я думаю, что это то, что вы хотите знать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню