Как получить уведомление, когда StorageFile был изменен через OneDrive?

У меня есть базовое приложение UWP для Windows 10 (работающее на ПК), которое объявляет пользовательский формат файла. Пользователь может открывать и редактировать документы этого формата (например, открыть файл.docx в Word Mobile).

У меня такой вопрос: скажем, пользователь открывает документ из OneDrive с моим приложением, и документ изменяется на другом устройстве. Как мое приложение может получить уведомление об изменении для перезагрузки документа?

Бонусный вопрос:) Что если возникнет конфликт, когда файл был изменен локально и одновременно на другом устройстве?

Внутренне я использую StorageFile что я получил от FileOpenPicker читать документ.

Я смотрел в StorageFolder.CreateFileQueryWithOptions(...), но я не могу получить ссылку на родительскую папку StorageFile, потому что мое приложение имеет разрешение только на чтение самого файла, но не на доступ к родительской папке.

Я мог бы периодически опрашивать дату изменения файла, но это кажется далеко от идеала...

1 ответ

Я думаю, что это могло бы быть возможно с OneDrive API и веб-крючками
К сожалению, я не могу найти ни одного примера для UWP (есть только один для ASP.NET)

Вы также можете попробовать сделать это с событием ContentsChanged.

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

.......

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

Вы можете найти некоторую информацию здесь: Уведомления об изменении файловой системы в WinRT

Это должно работать и с OneDrive из-за концепции умных файлов. Как взято из этой статьи: Работа с файлами на локальном ПК и SkyDrive

Как разработчик, рассматривайте файлы SkyDrive как "просто файлы" - они используют тот же интерфейс StorageFile, что и любой другой файл в системе, и ими можно манипулировать практически так же.

Интеллектуальный файл - это файл, который отображается в системе как обычный файл, но содержит только метаданные и эскизы, а не полное содержимое файла. Содержимое файла находится на SkyDrive и может быть загружено по мере необходимости.

Другие вопросы по тегам