当我尝试从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桌面应用程序中的在线文件?
答案 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);
}
离线属性并不直接表明该文件只是在线OneDrive文件,但该文件的数据不是立即可用的,我认为这是您想知道的。