【问题标题】:How to get notified when a StorageFile was changed through OneDrive?如何在通过 OneDrive 更改 StorageFile 时收到通知?
【发布时间】:2016-06-15 07:49:15
【问题描述】:

我有一个声明自定义文件格式的基本 UWP Windows 10 应用(在 PC 上运行)。用户可以打开和编辑该格式的文档(很像在 Word Mobile 中打开 .docx 文件)。

我的问题是这样的:假设用户使用我的应用从 OneDrive 打开一个文档,并且该文档在另一台设备上进行了修改。我的应用程序如何获得有关更改以重新加载文档的通知?

额外问题 :) 如果在本地和同时在另一台设备上修改文件时发生冲突怎么办?

在内部,我使用从FileOpenPicker 获得的StorageFile 来读取文档。

我查看了StorageFolder.CreateFileQueryWithOptions(...),但无法获得对 StorageFile 父文件夹的引用,因为我的应用只有读取文件本身的权限,而不能访问父文件夹。

我可以定期轮询文件的修改日期,但这似乎远非理想...

【问题讨论】:

    标签: c# windows-10 uwp onedrive storagefile


    【解决方案1】:

    我认为 OneDrive API 和 webhooks 可以实现这一点
    不幸的是,我找不到 UWP 的任何示例(只有 one for ASP.NET 可用)

    你也可以尝试用ContentsChanged event 来做

     auto query = folder.CreateFileQuery();
     query.ContentsChanged += queryContentsChanged;
    

    .......

    void queryContentsChanged(IStorageQueryResultBase sender, object args) 
    {
        // check what was changed 
    }
    

    你可以在这里找到一些信息:File system change notifications in WinRT

    由于智能文件的概念,这也应该适用于 OneDrive。摘自本文:Working with files across the local PC and SkyDrive

    作为开发人员,将 SkyDrive 文件视为“只是文件”——它们使用与系统上所有其他文件相同的 StorageFile 接口,并且可以以几乎相同的方式进行操作。

    智能文件是像普通文件一样出现在系统上的文件,但只包含元数据和缩略图,而不是完整的文件内容。该文件的内容位于 SkyDrive 上,可以根据需要下载。

    【讨论】:

    • 有没有办法用普通的 UWP API 做到这一点?理想情况下,这也适用于 Dropbox 和 iCloud Drive 等其他提供商......几乎任何情况下,文件都可以在打开时在应用程序之外更改。
    • 感谢您的更新。我之前查看了文件查询,但遇到了我的应用程序无权访问父文件夹的问题。我从 FileOpenPicker 获取 StorageFile 实例。对其调用 GetParentAsync() 始终返回 null。还有其他方法吗?
    • 您可以让用户先选择文件夹,然后才能选择文件(从自定义控件中,其中包含文件名)。在这种情况下,您将有权访问此文件夹中的文件夹和文件
    • 这可能行得通,但从用户体验的角度来看,它似乎非常麻烦。我仍然希望找到更好的方法,因为这似乎是一个常见的用例......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2014-04-10
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多