如何从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桌面应用程序中的仅在线文件?
这个问题比较老,所以这个答案主要针对通过搜索找到它的读者。
你可以判断一个文件是否是桌面应用程序中仅在线的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文件,但该文件的数据不是立即可用的,我认为这是您想要知道的。