2014-11-06 2 views
1

Когда я пытаюсь открыть OneDrive пути к файлам из приложения WPF я получаю следующее сообщение об ошибке при использовании File.ReadAllText(filename);:Как открыть OneDrive файлов из приложения WPF

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?

+2

Помогло ли это? Http: //blogs.msdn.com/b/dotnet/archive/2013/11/25/opening-files-from-skydrive-using-net.aspx –

+0

Не могли бы вы предоставить пример пути? –

ответ

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); 
} 

Offline атрибут напрямую не указывает, что файл находится в Интернете только OneDrive файлов, но данные файла не сразу доступны, и я думаю, что это то, что вы хотите знать.

Смежные вопросы